💪 @RickyMarou is an official maintainer. This change was made on 2024-04-12
as @clarkbw has not been able to devote sufficient time necessary for this project.
For npm:
npm i --save-dev jest-webextension-mock
For yarn:
yarn add --dev jest-webextension-mock
In your package.json
under the jest
section add the setupFiles
attribute with this module name.
"jest": {
"setupFiles": [
"jest-webextension-mock"
]
}
Alternatively you can create a new setup file and require this module.
__setups__/chrome.js
require('jest-webextension-mock');
And add that file to your setupFiles
:
"jest": {
"setupFiles": [
"./__setups__/chrome.js"
]
}
Use this module to check that API calls were made when expected.
describe('your function to test', () => {
it('should have called a webextension API', () => {
yourFunctionToTest();
expect(chrome.tabs.update).toHaveBeenCalled();
});
});
Check the API was called with certain parameters.
describe('your function to test', () => {
it('should have called a webextension API', () => {
yourFunctionToTest();
expect(chrome.tabs.update).toHaveBeenCalledWith({
url: 'https://example.com/'
});
});
});
And you can reset the API mocks to ensure APIs are only called when needed.
beforeEach(() => {
browser.geckoProfiler.start.mockClear();
browser.geckoProfiler.stop.mockClear();
});
it('should toggle the profiler on from stopped', () => {
const store = mockStore(reducer(undefined, {}));
const expectedActions = [
{ type: 'PROFILER_START', status: 'start' },
{ type: 'PROFILER_START', status: 'done' },
];
return store.dispatch(actions.toggle()).then(() => {
expect(browser.geckoProfiler.start).toHaveBeenCalledTimes(1);
expect(store.getActions()).toEqual(expectedActions);
});
});
npm install
npm test
Publishing new releases is automated via the GitHub Action https://github.com/mikeal/merge-release tool.
To ensure your feature is properly released prefix your commit message with feat
for any new feature. For example: feat: new API
and this will bump the minor release number. All other changes will be assumed as patch releases unless you include the string BREAKING CHANGE
in your commit message or description which will trigger a new major release. (do not do this unless absolutely required)