How to mock localStorage in JavaScript unit tests?

前端 未结 14 1621
南笙
南笙 2020-11-29 18:46

Are there any libraries out there to mock localStorage?

I\'ve been using Sinon.JS for most of my other javascript mocking and have found it is really gr

14条回答
  •  Happy的楠姐
    2020-11-29 19:29

    credits to https://medium.com/@armno/til-mocking-localstorage-and-sessionstorage-in-angular-unit-tests-a765abdc9d87 Make a fake localstorage, and spy on localstorage, when it is caleld

     beforeAll( () => {
        let store = {};
        const mockLocalStorage = {
          getItem: (key: string): string => {
            return key in store ? store[key] : null;
          },
          setItem: (key: string, value: string) => {
            store[key] = `${value}`;
          },
          removeItem: (key: string) => {
            delete store[key];
          },
          clear: () => {
            store = {};
          }
        };
    
        spyOn(localStorage, 'getItem')
          .and.callFake(mockLocalStorage.getItem);
        spyOn(localStorage, 'setItem')
          .and.callFake(mockLocalStorage.setItem);
        spyOn(localStorage, 'removeItem')
          .and.callFake(mockLocalStorage.removeItem);
        spyOn(localStorage, 'clear')
          .and.callFake(mockLocalStorage.clear);
      })
    

    And here we use it

    it('providing search value should return matched item', () => {
        localStorage.setItem('defaultLanguage', 'en-US');
    
        expect(...
      });
    

提交回复
热议问题