如何确定 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】:对我来说最好的方法是检查两件事 - 0
和 undefined
:
[0, undefined].includes(process.env.JEST_WORKER_ID)
所以它基于https://***.com/a/52231746/3012785
【讨论】:
以上是关于如何确定 JEST 是不是正在运行代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何确定代码是不是在 DEBUG / RELEASE 构建中运行?