@scaleleap/jest-polly
Smoothest Jest integration with PollyJS.
Integrate Jest with PollyJS for a smooth HTTP recording and playback experience for your integration tests.
List of features
- Sane default configuration
- Secret Sanitization
- TypeScript support
Environment Variables
Polly Mode
Can be set via POLLY_MODE
environment variable.
Mode can be one of the following:
-
replay
: Replay responses from recordings. -
record
: Force Polly to record all requests. This will overwrite recordings that already exist. -
passthrough
: Passes all requests through directly to the server without recording or replaying.
Default: replay
Usage:
POLLY_MODE=record npm t
Record if Missing
If a request's recording is not found, pass-through to the server and record the response.
Can be set via POLLY_RECORD_IF_MISSING
environment variable.
Default: false
if running in CI environment or true
otherwise.
Usage:
POLLY_RECORD_IF_MISSING=true npm t
Secret Sanitization
Sometimes requests and/or responses may contain secret data, such as API keys, or oAuth tokens.
To automatically sanitize the recordings, you may add a list of secrets to the config to be replaced.
See "Change PollyJS default config" section for details.
// use a Record-style config, where keys are secrets,
// and values are what they will be replaced with
jestPollyConfigService.config = {
secrets: {
'somepassword': 'x',
'my-api-key': 'x',
}
}
// or simply use an array, and everything will be replaced with `x` by default:
jestPollyConfigService.config = {
secrets: [process.env.MY_SECRET_VALYE]
}
Code Demo
Use in all tests
In your package.json
{
"jest": {
"setupFilesAfterEnv": ["@scaleleap/jest-polly"]
}
}
Or in jest.config.js
module.exports = {
setupFilesAfterEnv: ['@scaleleap/jest-polly'],
};
Use in a single test
In my.test.js
import '@scaleleap/jest-polly';
import fetch from 'node-fetch';
test('is ok', async () => {
const response = await fetch('https://httpstat.us/200');
expect(response.ok).toBe(true);
});
Using the Polly instance
Use the polly
instance to change default behavior.
import { jestPollyContext } from '@scaleleap/jest-polly';
import fetch from 'node-fetch';
jestPollyContext
.polly
.server
.any('https://httpstat.us/500')
.intercept((req, res) => res.sendStatus(500));
test('is not ok', async () => {
const response = await fetch('https://httpstat.us/500');
expect(response.ok).not.toBe(true);
});
Change PollyJS default config
If you want to change the default config, use the following setter.
Note: the config will be merged with the default config, and not overwritten.
import { jestPollyConfigService } from '@scaleleap/jest-polly';
jestPollyConfigService.config = {
matchRequestsBy: {
order: false
}
}
Download & Installation
npm i -D @scaleleap/jest-polly
Contributing
Keep it simple. Keep it minimal. Don't put every single feature just because you can.
Authors or Acknowledgments
- Authored by Roman Filippov (Scale Leap)
- Inspired by
@spotify/polly-jest-presets
, but the project wasn't well maintained - Inspired by
@jomaxx/jest-polly
, but wasn't usingsetup-polly-jest
License
This project is licensed under the MIT License