шутка и местное хранилище - PullRequest
       7

шутка и местное хранилище

0 голосов
/ 08 октября 2018

Я пытаюсь проверить localStorage с помощью jest:

    it("changes the localStorage", () => {
      const changeLocale = (languageLocale) => {
        localStorage.setItem("language", languageLocale);
        return {
          type: "CHANGE_LOCALE",
          locale: languageLocale
        };
      }


      const locale = "de";

      localStorage.clear();

      changeLocale(locale);

      expect(localStorage.setItem).toHaveBeenLastCalledWith(LOCAL_LANG, locale);
      expect(localStorage.__STORE__[LOCAL_LANG]).toBe(locale);
    });

Когда я пытаюсь запустить его с npm run test, он возвращает ошибку, подобную этой:

expect(jest.fn())[.not].toHaveBeenLastCalledWith()

jest.fn() value must be a mock function or spy.
Received:
  function: [Function setItem]

  33 |       changeLocale(locale);
  34 |
> 35 |       expect(localStorage.setItem).toHaveBeenLastCalledWith(LOCAL_LANG, locale);
     |                                    ^
  36 |       expect(localStorage.__STORE__[LOCAL_LANG]).toBe(locale);
  37 |     });
  38 |   });

Я использую jest-localstorage-mock.Не могли бы вы точно определить, почему я могу получить эту ошибку?Спасибо.

1 Ответ

0 голосов
/ 09 октября 2018

Я решил избавиться от использования jest-localstorage-mock.Вместо этого я делаю spyOn следующим образом:

jest.spyOn(Storage.prototype, 'setItem');
jest.spyOn(Storage.prototype, 'getItem');

Таким образом, все решение выглядит следующим образом:

it('changes the localStorage', () => {
  const changeLocale = languageLocale => {
    localStorage.setItem('language', languageLocale);
    return {
      type: 'CHANGE_LOCALE',
      locale: languageLocale
    };
  }

  const locale = 'de';

  jest.spyOn(Storage.prototype, 'setItem');
  jest.spyOn(Storage.prototype, 'getItem');

  localStorage.clear();

  changeLocale(locale);

  expect(localStorage.setItem).toHaveBeenLastCalledWith(LOCAL_LANG, locale);
  expect(localStorage.getItem(LOCAL_LANG)).toBe(locale);
});

Надеюсь, это кому-нибудь пригодится:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...