gpt4 book ai didi

jestjs - 为什么无法在测试代码中获取 globalSetup 中设置的全局变量?

转载 作者:行者123 更新时间:2023-12-04 12:39:28 26 4
gpt4 key购买 nike

我使用 Jest 在节点中进行单元测试。
我使用了新功能 globalSetup来自 Jest v22。
我在 globalSetup 中定义了一个全局变量.
但是我无法在测试代码中得到它。控制台日志未定义。
这个问题有人吗?
谢谢。

Jest 版本:22.0.0
节点版本:8.9.0
yarn 版本: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.

最佳答案

Jest 人自己提供了一个解决方案:https://jestjs.io/docs/en/puppeteer.html .请注意,如果您使用的是 CRA,这将无法开箱即用(下面的解决方案),因为它目前不支持 Jest 的 testEnvironment 选项。

无论如何:

  • 在 Jest 配置文件中,您可以设置全局设置、拆卸和测试环境脚本的路径
  • 在全局设置脚本中,您创建一个浏览器并将其 WSEndpoint 写入文件
  • 在全局拆卸脚本中,您只需关闭浏览器
  • 在 testEnvironment 脚本中,您从之前保存的文件中读取 WSEndpoint,然后使用它连接到正在运行的浏览器 - 在此之后,通过使用全局变量
  • ,您的测试中可以使用浏览器。

    如果您使用 CRA,您可以为这些测试使用自定义设置并完全单独运行它们。如果您使用 Puppeteer 进行 e2e 测试,这可能就是您想要做的。

    您只需在 package.json 中添加另一个脚本: "test:e2e": "jest -c ./jest-e2e.config.js"并根据需要进行设置。现在您将拥有 npm run test用于单元测试和 npm run test:e2e用于端到端测试。

    关于jestjs - 为什么无法在测试代码中获取 globalSetup 中设置的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48208608/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com