Use this module with Jest to run web tests that rely on localstorage
where you want a working localStorage like API and mocked localStorage functions.
This module has no runtime dependencies so your project won't pull in additional module dependencies by using this.
This should only be required as a dev dependency when your tests are running.
yarn:
yarn add --dev jest-localstorage-mock
npm:
npm i --save-dev jest-localstorage-mock
In your package.json
under the jest
section add the module name to the setupFiles
array. This is by far the simplest method for using this.
"jest": {
"setupFiles": [
"jest-localstorage-mock"
]
}
You can also append this to the array if you have other setup files.
"jest": {
"setupFiles": [
"./__setups__/other.js",
"jest-localstorage-mock"
]
}
Alternatively you can create a new setup file which then requires this module or add the require
statement to an existing setup file.
__setups__/localstorage.js
require('jest-localstorage-mock');
Add that file to your setupFiles
array:
"jest": {
"setupFiles": [
"./__setups__/localstorage.js"
]
}
For a create-react-app project you can replace the suggested mock with this at the beginning of the existing src/setupTests.js
file:
require("jest-localstorage-mock");
By including this in your Jest setup you'll allow tests that expect a localStorage
object to continue to run. The module can also allow you to use the mocks provided to check that your localStorage is being used as expected.
The __STORE__
attribute of localStorage.__STORE__
is made available for you to directly access the localStorage object if needed.
Check that your localStorage
calls were made when they were supposed to.
test('should save to localStorage', () => {
const KEY = 'foo', VALUE = 'bar';
dispatch(action.update(KEY, VALUE));
expect(localStorage.setItem).toHaveBeenLastCalledWith(KEY, VALUE);
expect(localStorage.__STORE__[KEY]).toBe(VALUE);
expect(Object.keys(localStorage.__STORE__).length).toBe(1);
});
Check that your storage is empty.
test('should have cleared the localStorage', () => {
dispatch(action.reset());
expect(localStorage.clear).toHaveBeenCalledTimes(1);
expect(localStorage.__STORE__).toEqual({}); // check store values
expect(localStorage.length).toBe(0); // or check length
});
Check that localStorage calls were not made when they shouldn't have been.
test('should not have saved to localStorage', () => {
const KEY = 'foo', VALUE = 'bar';
dispatch(action.notIdempotent(KEY, VALUE));
expect(localStorage.setItem).not.toHaveBeenLastCalledWith(KEY, VALUE);
expect(Object.keys(localStorage.__STORE__).length).toBe(0);
});
yarn install
yarn test
Before every PR run the following:
yarn run prettier
When publishing a new build, run the following:
yarn run prettier
yarn run build
npm version `${version}`
npm publish
git push --tags