当前位置: 首页 > 知识库问答 >
问题:

如何处理jest测试中的localStorage?

包德业
2023-03-14

我总是在Jest测试中得到“localstorage is not defined”,这很有意义,但我有什么选择呢?撞上砖墙。

共有2个答案

和和裕
2023-03-14

我通过以下内容找到了答案:https://groups.google.com/forum/#!topic/jestjs/9ephunwvytg

设置包含以下内容的文件:

var localStorageMock = (function() {
  var store = {};
  return {
    getItem: function(key) {
      return store[key];
    },
    setItem: function(key, value) {
      store[key] = value.toString();
    },
    clear: function() {
      store = {};
    },
    removeItem: function(key) {
      delete store[key];
    }
  };
})();
Object.defineProperty(window, 'localStorage', { value: localStorageMock });

然后在Jest配置下将以下行添加到package.json中

“SetupTestFrameworkScriptFile”:“PATH_TO_YOUR_FILE”,

印晋
2023-03-14

来自@Chiedo的伟大解决方案

不过,我们使用的是ES2015语法,我觉得这样写会稍微干净一些。

class LocalStorageMock {
  constructor() {
    this.store = {};
  }

  clear() {
    this.store = {};
  }

  getItem(key) {
    return this.store[key] || null;
  }

  setItem(key, value) {
    this.store[key] = String(value);
  }

  removeItem(key) {
    delete this.store[key];
  }
};

global.localStorage = new LocalStorageMock;
 类似资料:
  • null null 对上述重试功能执行以下测试。 总是传递一个承诺进行解析,重试函数在第一次执行时解析/li> 我以为写这些开玩笑的时候会是这样的。 因此,它失败,出现以下错误。 我认为,这将是可以管理的设置在笑话关于这个错误。但是,从根本上说,我不知道如何在Jest中测试promise递归处理。

  • 我正在通过运行Jest测试。默认情况下,Jest并行运行测试。有没有办法让测试按顺序运行? 我有一些测试调用依赖于更改当前工作目录的第三方代码。

  • 问题内容: 我正在为我的React代码编写Jest测试,并希望使用/测试PropType检查。我对Javascript领域很陌生。我正在使用npm进行安装并有一个简单的方法: 在我的测试中。我的测试看起来很像玩笑/反应教程示例,其代码如下: 但是,似乎并未触发组件中的PropType检查。我知道检查仅在开发模式下运行,但是我还认为通过npm获得了开发版本。当我使用watchify构建组件时,检查会

  • 问题内容: 在我的Jest单元测试中,我正在使用ColorPicker渲染组件。该组件创建一个canvas对象和2d上下文,但返回则抛出错误 我在弄清楚为什么我无法获得2D上下文时遇到了麻烦。我的测试配置可能有问题吗? 问题答案: 这是因为您的测试未在真正的浏览器中运行。Jest 用于模拟DOM的必要部分,以便能够在Node中运行测试,从而避免了样式计算和呈现浏览器通常会执行的渲染。这很酷,因为这

  • 问题内容: 在TDD(测试驱动开发)开发过程中,如何处理测试数据?假设有一个场景,解析日志文件以获取所需的列。对于强大的测试,我该如何准备测试数据?对我来说,将此类文件定位到测试类文件是否正确? 问题答案: 例如,Maven对用于处理测试数据的文件夹结构使用约定: 如果您使用maven进行构建,则需要将测试资源放置在正确的文件夹中,如果您使用其他内容进行构建,则您可能希望使用此结构,因为它不仅仅是

  • 我正在处理一些代码,需要测试函数抛出的异常类型(是TypeError、ReferenceError等吗?)。 我当前的测试框架是AVA,我可以将其作为第二个参数方法进行测试,如下所示: 我开始用笑话重写我的测试,但找不到如何轻松做到这一点。这有可能吗?