我使用Jest在节点中进行单元测试
我使用了Jest v22中的新功能globalSetup
我在globalSetup中定义了一个全局变量
但我无法在测试代码中得到它。控制台日志未定义。
这个问题的任何人?
感谢。
Jest版本: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.
答案 0 :(得分:1)
据我了解,这是Jest的设计决策,因为在不同测试之间共享状态被认为是一种不好的做法。测试并行运行,它们应该保持自己的状态。
请参阅: https://github.com/facebook/jest/issues/6007#issuecomment-381743011 https://github.com/facebook/jest/issues/4118
答案 1 :(得分:1)
Jest人自己提供了一个解决方案:https://jestjs.io/docs/en/puppeteer.html。请注意,如果您使用的是CRA,则无法立即使用(下面的解决方案),因为它目前不支持Jest的testEnvironment选项。
无论如何:
如果您使用的是CRA,则可以对这些测试使用自定义设置,然后完全单独运行它们。而且,如果您要使用Puppeteer进行e2e测试,那么无论如何,这可能就是您想要做的。
您只需将另一个脚本添加到package.json:"test:e2e": "jest -c ./jest-e2e.config.js"
中,然后根据需要进行设置。现在,您将拥有npm run test
的单元测试和npm run test:e2e
的端到端测试。
答案 2 :(得分:0)
你能试试..
global.foo = 'foo';
console.log(`global setup: ${global.foo}`);
(删除导出)
您可以尝试将globalSetup更改为setupFiles。那一个,不会指望一个功能。
https://facebook.github.io/jest/docs/en/configuration.html#setupfiles-array