如何模拟保存到 LocalStorage 的 redux 存储

How to mock redux store that is saved to LocalStorage

提问人:Vight 提问时间:5/24/2021 更新时间:5/27/2021 访问量:296

问:

我正在测试 redux 商店。如果存在保存到 localStorage 的存储,则应采用持久化的存储副本。

let preloadedState;
const persistedState = localStorage.getItem('movieDBState');

if (persistedState) {
  preloadedState = JSON.parse(persistedState); // should code coverage this line.
}

我的 jesj 代码覆盖率报告说,如果没有采取条件。 我试图以这种方式模拟本地存储:

const localStorageMock = (function () {
      let localStorage = {};
      return {
        getItem(key) {
          return localStorage[key];
        },
        setItem(key, value) {
          localStorage[key] = value.toString();
        },
        clear() {
          localStorage = {};
        },
        removeItem(key) {
          delete localStorage[key];
        },
      };
    }());

    Object.defineProperty(window, 'localStorage', { value: localStorageMock });

但它似乎对我不起作用。有没有办法在不使用任何模拟库的情况下测试本地存储。只有开玩笑。

reactjs 测试 redux jestjs

评论

0赞 Drew Reese 5/24/2021
您只是为了代码覆盖率而追求代码覆盖率,还是您有理由担心 Javascript 无法在那一行上运行?你有没有试过直接嘲笑它,即?什么不起作用?中方能否提供更多细节?window.localStorage = localStorageMock;
0赞 Vight 5/25/2021
我只需要获得代码覆盖率。我被迫为所有文件获得 100% 的代码覆盖率。现在我只被困在这条线上。这是我的商店和测试的代码:codepen.io/Vight/pen/dyOGxVo
0赞 Vight 5/25/2021
开玩笑代码覆盖率报告的链接:drive.google.com/file/d/1ps1SXOtvZ56NyjdCmu9-YgjuRz8rRnoJ/...

答:

0赞 Vight 5/27/2021 #1

找到解决方法。相反,if 语句我只是把 const preloadedState = JSON.parse(persistedState) ||{};

因此,如果 localStorage 为空并且 test 具有 100% 的代码覆盖率,则 createStore 不会丢弃。