Jestjs 为什么可以';t获取在测试代码的globalSetup中设置的全局变量?
我使用Jest在节点中进行单元测试。Jestjs 为什么可以';t获取在测试代码的globalSetup中设置的全局变量?,jestjs,Jestjs,我使用Jest在节点中进行单元测试。 我使用的新功能是在22版中推出的。 我在中定义了一个全局变量。 但是我不能在测试代码中得到它。控制台日志未定义。 有人问这个问题吗? 谢谢 笑话版本:22.0.0 节点版本:8.9.0 纱线版本:1.3.2 操作系统:mac High Sierra 10.13.2 代码如下: // package.json { "jest": { "globalSetup": "<rootDir>/src/globalSetupTest.js"
我使用的新功能是在22版中推出的。
我在中定义了一个全局变量。
但是我不能在测试代码中得到它。控制台日志未定义。
有人问这个问题吗?
谢谢 笑话版本:22.0.0
节点版本:8.9.0
纱线版本:1.3.2
操作系统:mac High Sierra 10.13.2 代码如下:
// package.json
{
"jest": {
"globalSetup": "<rootDir>/src/globalSetupTest.js"
}
}
// globalSetupTest.js
module.exports = async function() {
global.foo = 'foo';
console.log(`global setup: ${global.foo}`);
};
// App.test.js
describe('APP test', () => {
it('renders without crashing', () => {
console.log({ foo: global.foo });
});
});
// test result
yarn run v1.3.2
$ node scripts/test.js --env=node --colors
global setup: foo
PASS src/App.test.js
APP test
✓ renders without crashing (5ms)
console.log src/App.test.js:3
{ foo: undefined }
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.354s, estimated 1s
Ran all test suites.
//package.json
{
“笑话”:{
“globalSetup”:“/src/globalSetupTest.js”
}
}
//globalSetupTest.js
module.exports=异步函数(){
global.foo='foo';
log(`global setup:${global.foo}`);
};
//App.test.js
描述('应用程序测试',()=>{
它('渲染而不崩溃',()=>{
log({foo:global.foo});
});
});
//测试结果
纱线运行v1.3.2
$node scripts/test.js--env=node--colors
全局设置:foo
通过src/App.test.js
应用程序测试
✓ 渲染而不崩溃(5ms)
console.log src/App.test.js:3
{foo:undefined}
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:0.354s,估计1s
运行所有测试套件。
你能试试吗
global.foo = 'foo';
console.log(`global setup: ${global.foo}`);
(删除导出)
您可以尝试将全局设置更改为设置文件。那个,不需要函数
因为我所理解的是一个玩笑的设计决策,因为在不同的测试中共享状态被认为是一种不好的做法。测试并行运行,它们应该保持自己的状态 见:
开玩笑的人自己提供了一个解决方案:。请注意,如果您使用CRA,这将无法开箱即用(下面的解决方案),因为它目前不支持Jest的TestenEnvironment选项 无论如何:
- 在Jest配置文件中,您可以设置全局设置、拆卸和测试环境脚本的路径
- 在全局设置脚本中,创建浏览器并将其WSEndpoint写入文件
- 在全局拆卸脚本中,只需关闭浏览器
- 在TestenEnvironment脚本中,从之前保存的文件中读取WSEndpoint,然后使用它连接到正在运行的浏览器-在此之后,通过使用全局变量,可以在测试中使用浏览器
您只需将另一个脚本添加到package.json:
“test:e2e”:“jest-c./jest-e2e.config.js”
,并根据需要进行设置。现在,您将有用于单元测试的npm运行测试
,以及用于端到端测试的npm运行测试:e2e
。我正在努力解决同样的问题。当我删除模块导出
时,测试将出现错误:类型错误:require(…)不是函数
我认为globalSetup
必须导出函数,否则将失败。请更改设置文件的全局设置。看看我的答案。那也许行,谢谢你。是的,设置文件是可以的。但是setupfile将在每次测试之前运行。我想使用globalSetup,因为它在所有测试之前只运行一次。谢谢。我的场景是使用jest运行node.js单元测试,我想在运行所有测试之前创建测试db环境,并在所有测试运行之后删除db。也许这和使用木偶演员有点不同。你可以在没有测试环境的情况下尝试上面的方法,因为你不需要它。