Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stoically/webextensions-api-mock
WebExtensions API as sinon stubs
https://github.com/stoically/webextensions-api-mock
Last synced: about 1 month ago
JSON representation
WebExtensions API as sinon stubs
- Host: GitHub
- URL: https://github.com/stoically/webextensions-api-mock
- Owner: stoically
- License: mpl-2.0
- Created: 2019-11-17T11:39:22.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-01-29T11:40:35.000Z (almost 5 years ago)
- Last Synced: 2024-10-04T06:18:50.558Z (2 months ago)
- Language: TypeScript
- Homepage:
- Size: 218 KB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- Awesome-WebExtensions - webextensions-api-mock - WebExtensions API as sinon stubs (includes TypeScript types). (Testing)
README
# WebExtensions API Mock
Automatically generated [`sinon stubs`](https://sinonjs.org/releases/latest/stubs/), together with types, for the [WebExtensions API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/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`](https://github.com/stoically/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](https://github.com/jsmnbom/definitelytyped-firefox-webext-browser)
## Install
```shell
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
```ts
import browserMock from 'webextensions-api-mock';
// or
// const { default: browserMock } = require('webextensions-api-mock');const browser = browserMock();
```All `browser` methods are now [`sinon stubs`](https://sinonjs.org/releases/latest/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
```ts
assert(browser.tabs.create.called);
```To trigger event listeners, you can use the [`yield` method on stubs](https://sinonjs.org/releases/latest/stubs/).
```ts
browser.tabs.onCreated.addListener.yield();
```Every call to `browserMock()` creates a new `browser` object based on a new
[`sinon sandbox`](https://sinonjs.org/releases/latest/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```ts
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
```ts
import { update } from 'webextensions-api-mock';
// or
// const { update } = require('webextensions-api-mock');(async () => {
await update();
})();
```### Using CLI
```
webextensions-api-mock update
```