【问题标题】:How do I run some config before every Jest test run如何在每次 Jest 测试运行之前运行一些配置
【发布时间】:2014-09-20 22:52:56
【问题描述】:

我正在为 React 应用程序编写测试,该应用程序使用 Fluxxor 来提供事件调度程序。要做到这一点,需要告诉 Jest 不要模拟一些内部使用的模块,这些模块由 Node 本身提供。

这意味着我不能只将它们添加到 unmockedModulePathPatterns 配置键中,而是必须使用如下代码:

[ 'util', 'events' ].forEach(function (module) {
  jest.setMock(module, require.requireActual(module));
});

但是,我找不到任何有用的地方来放置它。我有一个setupEnvScriptFile,它设置了一些我在几乎所有测试中都使用的全局变量,但是jest 对象在那种情况下似乎不可用,所以我不能只在那里设置模拟.

作为权宜之计,我将上面的代码封装在一个函数中,我在任何 describe 块测试 Fluxxor 商店的开头调用该函数,但它远非理想。

【问题讨论】:

  • 为什么你不能使用unmockedModulePathPatterns
  • 老实说,我并不确切地知道 为什么 它对我不起作用,但我在将核心 Node 模块添加到 unmockedModulePathPatterns 方面所做的任何尝试都没有当我尝试使用以下模式时效果:util/usr/lib/node/util/usr/lib/node 在任何情况下,util 模块都会被嘲笑。
  • 哦,难道util 本身可能没有被模拟,而是它加载了其他被模拟的模块?
  • 不,util 本身肯定会被嘲笑,因为当我使用 require.requireActual 时,我会得到预期的 util 对象,如果我不这样做,那么我会得到一个 Jest 模拟。

标签: unit-testing reactjs reactjs-flux jestjs


【解决方案1】:

你试过config.setupTestFrameworkScriptFile吗?根据文档,这似乎是修补 api 的正确位置。

【讨论】:

【解决方案2】:

似乎至少目前的答案是“在这种情况下你不能”,但是需要进行两项更改才能支持它。

https://github.com/facebook/jest/issues/106 https://github.com/facebook/jest/issues/107

【讨论】:

    【解决方案3】:

    FWIW,这是我们一直在使用的解决方案,用于将 Fluxxor 和 React-Router 支持添加到我们的测试规范中。

    https://gist.github.com/adjavaherian/a15ef0461e65d58aacd2

    【讨论】:

      猜你喜欢
      • 2018-07-21
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多