Awesome
WebExtensions API Mock
Automatically generated sinon stubs
, together with types, for the WebExtensions API. Currently based on the Firefox version 72.0.2 schema. Comes with an API and CLI that lets you update the schema and types to the latest stable Firefox version, thanks to webextensions-schema
.
To get globally declared window.browser
types for production code I'd recommened installing @types/firefox-webext-browser
, those are automatically generated by jsmnbom/definitelytyped-firefox-webext-browser
Install
npm install --save-dev sinon webextensions-api-mock
Important: sinon
is a peer dependency, so you have to install it yourself. That's because it can otherwise lead to unexpected assertion behavior when sinon does instanceof
checks internally. It also allows to upgrade sinon without the need to bump the version in webextensions-api-mock
.
Usage
import browserMock from 'webextensions-api-mock';
// or
// const { default: browserMock } = require('webextensions-api-mock');
const browser = browserMock();
All browser
methods are now sinon stubs
and hence you can use them as usual in your test, e.g. if your production code calls browser.tabs.create()
you can assert it
assert(browser.tabs.create.called);
To trigger event listeners, you can use the yield
method on stubs.
browser.tabs.onCreated.addListener.yield();
Every call to browserMock()
creates a new browser
object based on a new
sinon sandbox
. The sinon sandbox itself is exposed as sinonSandbox
property on the
browser
object. So to e.g. reset the history of all browser stubs, you'd call
browser.sinonSandbox.resetHistory();
Update schema and types
Update the schema and types to the latest available stable Firefox version. Feel free to PR updated schema and types if they're not up-to-date.
Using API
import { update } from 'webextensions-api-mock';
// or
// const { update } = require('webextensions-api-mock');
(async () => {
await update();
})();
Using CLI
webextensions-api-mock update