• Stars
    star
    320
  • Rank 131,126 (Top 3 %)
  • Language
    JavaScript
  • License
    BSD 3-Clause "New...
  • Created over 7 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A module to mock window.localStorage and window.sessionStorage in Jest

Use this module with Jest to run web tests that rely on localstorage and / or sessionStorage where you want a working localStorage API with mocked functions.

This module has no runtime dependencies so your project won't pull in additional module dependencies by using this.

npm npm Codecov Greenkeeper badge Twitter

Jest 24+

Note that with jest@24 and above this project potentially duplicating functionality.

Install

This should only be installed as a development dependency (devDependencies) as it is only designed for testing. The module is transpiled via babel to support the current active Node LTS version (6.11.3).

yarn:

yarn add --dev jest-localstorage-mock

npm:

npm i --save-dev jest-localstorage-mock

Setup

The simplest setup is to use the module system, you may also choose to create a setup file if needed.

Module

In your package.json under the jest configuration section create a setupFiles array and add jest-localstorage-mock to the array. Also, ensure you have not enabled resetMocks.

{
  "jest": {
    "resetMocks": false,
    "setupFiles": ["jest-localstorage-mock"]
  }
}

If you already have a setupFiles attribute you can also append jest-localstorage-mock to the array.

{
  "jest": {
    "resetMocks": false,
    "setupFiles": ["./__setups__/other.js", "jest-localstorage-mock"]
  }
}

Setup file

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

import 'jest-localstorage-mock';
// or
require('jest-localstorage-mock');

Add that file to your setupFiles array:

"jest": {
  "setupFiles": [
    "./__setups__/localstorage.js"
  ]
}

In create-react-app

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');

You must also override some of create-react-app's default jest configuration. You can do so in your package.json:

{
  "jest": {
    "resetMocks": false
  }
}

For more information, see #125.

In tests

By including this in your Jest setup you'll allow tests that expect a localStorage and sessionStorage 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__ or sessionStorage.__STORE__ is made available for you to directly access the storage object if needed.

Test Examples

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 sessionStorage is empty, examples work with either localStorage or sessionStorage.

test('should have cleared the sessionStorage', () => {
  dispatch(action.reset());
  expect(sessionStorage.clear).toHaveBeenCalledTimes(1);
  expect(sessionStorage.__STORE__).toEqual({}); // check store values
  expect(sessionStorage.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);
});

Reset your localStorage data and mocks before each test to prevent leaking.

beforeEach(() => {
  // to fully reset the state between tests, clear the storage
  localStorage.clear();
  // and reset all mocks
  jest.clearAllMocks();
  
  // clearAllMocks will impact your other mocks too, so you can optionally reset individual mocks instead:
  localStorage.setItem.mockClear();
});

test('should not impact the next test', () => {
  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);
});

test('should not be impacted by the previous test', () => {
  const KEY = 'baz',
    VALUE = 'zab';
  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);
});

See the contributing guide for details on how you can contribute.

More Repositories

1

loopback-ds-timestamp-mixin

A mixin to automatically generate createdAt and updatedAt Date attributes for loopback Models
JavaScript
115
star
2

jest-webextension-mock

A module to mock WebExtensions in Jest
JavaScript
93
star
3

probot-in-progress

A Probot that marks issues with a specific label when an in progress PR indicates they will be fixed
JavaScript
14
star
4

about-history

A firefox add-on with an awesome history view
JavaScript
13
star
5

searchspot

Firefox add-on for better searching. Multiple search suggestions from a number of different providers. Local search based on GeoLocation. Better search engine preferences management.
JavaScript
13
star
6

circleci-update-yarn-lock

Script to udpate your yarn.lock file from CircleCI, run after greenkeeper changes
Shell
10
star
7

indexed-db-storage

indexed-db-storage is a promise based wrapper around the indexed-db storage layer built for use with the mozilla addon-sdk
JavaScript
10
star
8

addon-pathfinder

The Add-on Pathfinder is the collection of Jetpack modules.
JavaScript
9
star
9

task-list-zero-bot

A probot that blocks merging when there are unchecked checkboxes in your PR description
JavaScript
9
star
10

mdn-reference-search

Search MDN for JS and CSS references via the browser URL bar
JavaScript
6
star
11

npm-package-search

Search for NPM Package via the browser URL bar
JavaScript
6
star
12

google-calendar-tab

Use Thunderbird and Google Calendar? This opens Google Calendar in a tab for you with a handle tab button
JavaScript
6
star
13

extract-zds

Extract ZD ticket references from the current issue
TypeScript
5
star
14

FirefoxAndroidPhoneBuddy

Android application for connecting with your Firefox Browser
Java
4
star
15

thunderbird-bugzilla-link-grabber

Extracts and cleans bugzilla links from Thunderbird Messages
JavaScript
4
star
16

fetch-community-topics

An Action to fetch topics from the GitHub community
TypeScript
4
star
17

browser-search-engine

Mozilla Add-on SDK module for the nsIBrowserSearchService
JavaScript
3
star
18

no-merge-commits

A Probot app that doesn't allow for merge commits
JavaScript
3
star
19

clarkbw

AMA
3
star
20

docker-build

TypeScript
3
star
21

extract-community

TypeScript
3
star
22

loopback-example-email-templates

example application that uses proposed email templates
CSS
3
star
23

clarkbw.github.io

HTML
3
star
24

container-actions-privs

Dockerfile
3
star
25

loopback-mixins-example

DEPRECATED: Example of using mixins within loopback
3
star
26

webext-omnibox-highlight

A WebExtension module for highlighting matches with the omnibox API for Chrome and Firefox
JavaScript
3
star
27

neon-nextjs-drizzle-auth0

TypeScript
2
star
28

committed-mozillians

Photos of Mozillians as they commit code
JavaScript
2
star
29

test-node-package

2
star
30

Ask-Which-Firefox-Window

A Firefox add-on that asks you which window it was supposed to open a tab in
Shell
2
star
31

mozilla-readability-read

JavaScript
2
star
32

devtools-metrics

Metrics Dashboard for Firefox DevTools
JavaScript
2
star
33

mlb-proxy

vcap proxy for mlb data to route around CORS issue
JavaScript
2
star
34

npr-demo

Demo of an HTML5 NPR App designed for all browsers
JavaScript
2
star
35

open-in-firefox

JavaScript
2
star
36

setup-docker

An Action for securely logging a docker client into a Docker registry
TypeScript
2
star
37

zendesk-view

An Action for querying a Zendesk view
TypeScript
2
star
38

about-new-tab

JavaScript
2
star
39

about-debugging

Test layout page for the Firefox about:debugging page
2
star
40

searchspot-server

The server component to the searchspot add-on, this isn't required to run but collects statistics on searchspot usage
JavaScript
2
star
41

github-employees-only-action

Outputs all non-empoyees of GitHub to an array
JavaScript
2
star
42

mlb

An unofficial MLB web app
JavaScript
2
star
43

apps-demo

2
star
44

drizzle

Python
2
star
45

fx-sdk-geocode

Mozilla Add-on SDK module for the geocoding geolocation results
JavaScript
2
star
46

devtools-inspector

Demo of a devtools inspector
2
star
47

moz-apps

A suite of omnigraffle stencils for Mozilla Apps Designers
2
star
48

Thunderbird-Mega-Preferences

A new look at Thunderbird preferences orgranized and cleanly designed
2
star
49

test-probot-repo

This is a test of the emergency probot system, this is only a test
2
star
50

loopback-failing-upsert

JavaScript
2
star
51

jekyll-test

Generate files, but then hide those generated files from code review
HTML
2
star
52

cards

JavaScript
2
star
53

reload-error

Firefox add-on to reload the network error pages when the network returns
JavaScript
2
star
54

rails-translate-demo

2
star
55

autocompleteoff

Turns off the autocomplete attribute in any form that accepts a password
JavaScript
2
star
56

about-what

Used for creating about: URIs in Firefox
JavaScript
2
star
57

browserid-design

Designs for testing the latest browserid work
JavaScript
2
star
58

fantastic-bar

A future url bar prototype for Firefox.
JavaScript
2
star
59

pocket-addon

Firefox add-on for Pocket
JavaScript
2
star
60

telemetry-promises

A Promise based JS API for Mozilla Telemetry
1
star
61

netflixtab

a new take on the new tab page for firefox
JavaScript
1
star
62

jsonviewer.html

JavaScript
1
star
63

moar-private

JavaScript
1
star
64

loopback-user-email

Email templates for handling user management within the Strongloop Loopback framework
1
star
65

npr-temp

initial npr demo to get our real demo working
JavaScript
1
star
66

replaybrowseractions

1
star
67

yelp-search

Yelp search WebExtension
JavaScript
1
star
68

vizzini

gives you a button that will take your browser back to it's original homepage state
JavaScript
1
star
69

ignoreplus

ignore google plus by scrolling it out of view as google properties load
JavaScript
1
star
70

victoria

1
star
71

fx-sdk-geolocation

Mozilla Add-on SDK module for the nsIDOMGeoGeolocation
JavaScript
1
star
72

Thunderbird-Captive-Portal-Detector

Looks for those wifi login pages when Thunderbird starts and opens a tab to login into the network so you can check your mail
JavaScript
1
star