如何确定JEST是否正在运行代码?

Joj*_*rte 15 javascript mocking firebase jestjs react-native

我正在我的react-native项目上创建一个JS测试.我特意使用firebase for react native,如果JS运行我的类的代码,我想用mockfirebase实例替换firebase实例.

例如,我有类似下面的类设置.

import firebase from 'react-native-firebase';
class Database() {
    /// use the firebase instance
}
Run Code Online (Sandbox Code Playgroud)

我想检查jest是否是运行环境,然后我用适当的模拟类替换导入行.

gae*_*123 20

jest设置了一个名为JEST_WORKER_ID的环境变量,因此您检查是否已设置:

function areWeTestingWithJest() {
    return process.env.JEST_WORKER_ID !== undefined;
}
Run Code Online (Sandbox Code Playgroud)

我还看到,如果未设置NODE_ENV,则开玩笑的CLI会将其设置为值“ test”。这可能是另一种检查方法。

  • JEST_WORKER_ID 没有为我设置,但 NODE_ENV 是。 (3认同)
  • 如果您使用 Next.js 的导出功能 `JEST_WORKER_ID` 也会在生产中定义,因为它似乎使用 jest-worker 模块。 (2认同)
  • 如果它永远不会改变,为什么要每次都评估它呢?最好将其存储在常量中。 (2认同)
  • 我这样做 `process.env.JEST_WORKER_ID === undefined || process.env.NODE_ENV !== '测试'` (2认同)

Fáb*_*tos 9

我通常NODE_ENV=development在我的外壳上全局设置。这对我有用:

typeof jest !== 'undefined'
Run Code Online (Sandbox Code Playgroud)

(请注意global.jest并且'jest' in global不起作用,因为这似乎不是一个全局变量,只是一个在所有模块上都可用的值,很像 node 的requireor __filename

  • 在我的 React Native 设置中,当在附加到调试器的 iOS 模拟器中运行时,`typeof jest !== 'undefined'` 为 false(即已定义),因此我必须检查工作 ID,如另一个答案中所示。 (2认同)