gpt4 book ai didi

javascript - Jest 是单独导入每个测试文件,还是在执行前一次挂载所有引用?

转载 作者:行者123 更新时间:2023-12-01 15:37:20 26 4
gpt4 key购买 nike

我有几个单元测试,每个模块通过一个方法从 JSON 文件中导入大量数据资源。这个 IIFE 方法由每个测试模块导入,我试图弄清楚为什么我的测试这么慢。 JSON 数据量很大,所以我猜之所以会出现这种情况,是因为每个测试在运行时都会导入大量数据。如果是这种情况,我将不得不修改方法,只返回特定的数据集。

所以我的问题是,是每次运行每个测试模块时导入的数据,还是只在我执行 npm run test 时导入一次? ?

我拥有的结构的一个基本示例:
Codesandbox .说test1.js仅需要 dataset_1数据json中的key,另外两个测试文件需要dataset_2 .编写一个将所需的数据 Prop 返回到调用它的测试文件的方法会更高效,还是无关紧要?尽我所能正确地表达这个问题,请让我知道我还能澄清什么。

最佳答案

是的,我认为你需要更新你的测试。这就是文档在 resetModules configuration switch section 中所说的。 :

... each test file gets its own independent module registry.


这与我观察到的行为相符。对于每个测试文件,整个运行时都会重新构建,这意味着所有模块都是从头开始导入的。这是有道理的,因为这意味着与未在测试之间清理的可变全局状态相关的常见测试错误已被根除。
此外,值得注意的是,jest 可以(如果并非总是如此)使用子进程来运行每个测试,以便可以更轻松地并行化,这也是为每个测试文件进行全新设置有意义的另一个原因。您可以使用 --runInBand 将其关闭。 ,但这不会改变行为,请参见下面的示例。
在默认安装中,您只需输入 console.log() 即可查看问题。导入文件中的语句,然后有两个测试导入它,例如:
mylib.js
console.log('Hello from mylib.js!');
Jest/test1.js
const mylib = require('../mylib');
describe('test1', () => {
it('should be equal', () => {
expect(1).toEqual(1);
});
});
Jest/test2.js
const mylib = require('../mylib');
describe('test2', () => {
it('should be equal', () => {
expect(2).toEqual(2);
});
});
我得到的输出如下:
 3.2: npm run jest -- --runInBand jests/test*

> fgamelib@0.1.0 jest /path/to/cwd
> jest "jests/test1.jest.js" "jests/test2.jest.js"

(node:60746) ExperimentalWarning: The fs.promises API is experimental
PASS jests/test1.jest.js
● Console

console.log
Hello from mylib.js!

at Object.<anonymous> (mylib.js:1:9)

PASS jests/test2.jest.js
● Console

console.log
Hello from mylib.js!

at Object.<anonymous> (mylib.js:1:9)


Test Suites: 2 passed, 2 total
Tests: 2 passed, 2 total
Snapshots: 0 total
Time: 1.075 s
Ran all test suites matching /jests\/test1.jest.js|jests\/test2.jest.js/i.

关于javascript - Jest 是单独导入每个测试文件,还是在执行前一次挂载所有引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60322379/

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