@spotify/polly-jest-presets

2020-02-12

@spotify/polly-jest-presets

Presets for Jest that make Polly.js plug-and-play

polly-jest-presets

Actions StatusVersion

An opinionated configuration and wrapper around Pollyand setup-polly-jestto have automatic recording and playback of network requests made during your Jesttests.

Note:Polly Jest Presets bundles in all necessary Polly packages to make the setup as easy as possible for a typical Node-based web app. It uses File persister to store recordings locally. Therefore, there's no need to install Polly or Polly Jest bindings separately in your project after including this preset.

Packages included:

"@pollyjs/adapter-node-http": "^2.6.0",
"@pollyjs/core": "^2.6.0",
"@pollyjs/persister-fs": "^2.6.0",
"setup-polly-jest": "^0.5.2",

Usage

Install the preset as a dev dependency:

yarn add @spotify/polly-jest-presets -D

Add the preset to your Jest config(by default jest.config.js), in the setupFilesAfterEnv:

{
  "setupFilesAfterEnv": ["@spotify/polly-jest-presets"]
}

Getting Started

To test it out, make a network request in one of your tests.

// `yarn add -D node-fetch` for this demo
const fetch = require('node-fetch');

describe('a dummy test', () => {
  it('fetches something', async () => {
    const resp = await fetch('https://reqres.in/api/users?page=2');
    const payload = await resp.json();
    expect(payload.data.length).toBeGreaterThan(1);
  });
});

First, you need to run the tests with the POLLY_MODEenvironment variable set to record. This will tell Polly that you intend for all of the requests to record in this test run.

POLLY_MODE="record" jest

You should now see a .polly_recordingsdirectory at the root of your project. It should contain a .harfile which shows the request we made within the it block.

To test that playback works, disconnect your internet on your machine and run:

POLLY_MODE="replay" jest

The test still passes! Note: the default POLLY_MODE is replay.

Configuration and API usage

If you want to override Polly configuration, you can add configuration to globals.pollyConfigin the Jest config:

{
  "globals": {
    "pollyConfig": {
      "expiresIn": "3 months"
    }
  }
}

See all of the valid Polly options in the Polly documentation.

You may also want to get at the global Polly instance. You can grab it from the globalobject in Node:

global.pollyContext.polly.server.get('/series')
  .intercept((req, res) => res.sendStatus(200));

See all of the Polly API methods in the Polly documentation.

Opinions

This preset has a few opinions baked in. All of these are overridable by setting the globals.pollyConfigin your Jest config.

Expire recordings often

We think it's safer to expire recordings frequently. The default expiresInis set to "14d"in this preset, and we plan to update Pollyto support throwing errors when encountering expired recordings in replaymode.

Enabling warning for recordings expiring soon

We offer a script that can be included in pre-commit hook to warn users about recordings that will expire soon. This is to encourage timely re-recording and prevent people from getting blocked because of tests failing on CI due to expired recordings.

As this script does not have access to Polly config, default values are provided and can be overridden via following environment variables:

# after how many days from last recording are recordings considered expired
POLLY_DAYS_EXPIRY=14

# how many days prior to recording expiry we should warn user about it
POLLY_DAYS_TO_WARN=3

# directory with recordings
RECORDINGS_DIR=.polly_recordings

Example package.json extract, using yarn and husky:

"husky": {
    "hooks": {
      "pre-commit": "POLLY_DAYS_EXPIRY=21 node ./node_modules/@spotify/polly-jest-presets/cjs/expiryWarning.js",
    }
}

This will yield following output in console:

Expiry Warning Example

Explicit recording only (no recordIf*)

We think it makes more sense to avoid recording in the background for test authoring to avoid unexpected changes to checked in .har files. Because of this, we have set all of the recordIf*config values to false. This means that your tests will fail when you first write them if you don't override POLLY_MODE.

Contributing

See CONTRIBUTINGguidelines.

以上是 @spotify/polly-jest-presets 的使用教程帮助文档。

  • @spotify/polly-jest-presets官网:官网
  • @spotify/polly-jest-presets源码仓库:源码仓库

上一篇:@hharnisc/turtle-race
下一篇:@jomaxx/jest-polly
相关教程
关注微信

扫码加入 JavaScript 社区

相关文章
暂无相关文章

首次访问,需要验证
微信扫码,关注即可
(仅需验证一次)

欢迎加入 JavaScript 社区

号内回复关键字:

回到顶部