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

Posted

技术标签:

【中文标题】如何确定 JEST 是不是正在运行代码?【英文标题】:How to determine if JEST is running the code or not?如何确定 JEST 是否正在运行代码? 【发布时间】:2018-11-29 03:21:12 【问题描述】:

我正在我的 react-native 项目上创建一个 JS 测试。我专门使用firebase进行本机反应,如果JS正在运行我的类的代码,我想用一个mockfirebase实例替换firebase实例。

例如,我有如下的课程设置。

import firebase from 'react-native-firebase';
class Database() 
    /// use the firebase instance

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

【问题讨论】:

【参考方案1】:

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

function areWeTestingWithJest() 
    return process.env.JEST_WORKER_ID !== undefined;

我还看到,如果未设置 NODE_ENV,jest CLI 会将其设置为值“test”。这可能是另一种检查方式。

【讨论】:

JEST_WORKER_ID 不是为我设置的,但 NODE_ENV 是。 如果你 Next.js 的导出功能 JEST_WORKER_ID 也会在生产中定义,因为它似乎使用了 jest-worker 模块。 如果它从不改变,你为什么要每次都评估它?最好将其存储在 const 中。 我这样做process.env.JEST_WORKER_ID === undefined || process.env.NODE_ENV !== 'test'【参考方案2】:

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

typeof jest !== 'undefined'

(注意global.jest'jest' in global 不起作用,因为这似乎不是一个全局变量,只是一个在所有模块上都可用的值,就像节点的require__filename

【讨论】:

在我的 React Native 设置中,typeof jest !== 'undefined'ios 模拟器中运行时为假(即已定义),附加到调试器,因此我必须检查工作人员 ID,如另一个所示回答。 在我尝试过的其他环境中,由于某种原因,这也失败了。这个变量是否可用似乎存在一些差异。【参考方案3】:

您可以将参数添加到global,例如 global.isJest 并检查前端是否已定义

【讨论】:

【参考方案4】:

对我来说最好的方法是检查两件事 - 0undefined

[0, undefined].includes(process.env.JEST_WORKER_ID)

所以它基于https://***.com/a/52231746/3012785

【讨论】:

以上是关于如何确定 JEST 是不是正在运行代码?的主要内容,如果未能解决你的问题,请参考以下文章

运行特定的笑话项目

运行测试时出错 - jest.mock 不是函数

如何确定代码是不是在 DEBUG / RELEASE 构建中运行?

如何将 jest 测试移动到 /test 文件夹并让它们运行?

运行 Jest 时替换 `require.context`

用 bootstrap-vue 运行 jest