💪 @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-mockFor yarn:
yarn add --dev jest-webextension-mockIn 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)