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

Javascript 如何确定JEST是否正在运行代码?,javascript,firebase,react-native,mocking,jestjs,Javascript,Firebase,React Native,Mocking,Jestjs,我正在我的react原生项目上创建一个JS测试。我专门将firebase用于react native,在其中,如果JS正在运行我类的代码,我想用mockfirebase实例替换firebase实例 例如,我有如下的类设置 import firebase from 'react-native-firebase'; class Database() { /// use the firebase instance } 我想检查jest是否是正在运行的环境,然后用适当的mock类替换导入行。j

我正在我的react原生项目上创建一个JS测试。我专门将firebase用于react native,在其中,如果JS正在运行我类的代码,我想用mockfirebase实例替换firebase实例

例如,我有如下的类设置

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

我想检查jest是否是正在运行的环境,然后用适当的mock类替换导入行。

jest设置了一个名为jest\u WORKER\u ID的环境变量,因此您可以检查是否设置了:

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

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

我通常在shell上全局设置
节点\u ENV=development
。这对我很有用:

typeof jest !== 'undefined'

(请注意,
global.jest
'jest'在global
中不起作用,因为这似乎不是一个全局变量,只是一个在所有模块上都可用的值,就像节点的
要求
\u文件名

您可以将参数添加到
global
中,例如global.isJest,并在前端检查是否定义了该参数,但是NODE_ENV是。如果你下一步。js的导出功能
JEST_WORKER_ID
也将在生产中定义,因为它似乎使用JEST WORKER模块。如果它从未更改,为什么每次都要对它进行评估?最好将其存储在常量中。在我的React本机设置中,
typeof jest!='未定义的“
在iOS模拟器中运行时为false(即,它已定义),连接到调试器,因此我必须检查工人ID,如另一个答案中所示。