gpt4 book ai didi

jestjs - 每个测试套件和跨测试用例 Jest 初始化和共享对象一次

转载 作者:行者123 更新时间:2023-12-05 03:51:52 24 4
gpt4 key购买 nike

我想在 jest 测试套件之间使用共享资源。我在互联网上阅读并发现 this可能是解决方案。但是每个测试文件都会调用 setup

我有两个测试文件 links.test.js 和 'subscritpions.test.js'。我通常用一个命令调用它们 jest 就这样。

问题是我的自定义环境custom-environment.jssetup函数:

const NodeEnvironment = require('jest-environment-node');

const MySql = require('../../lib/databases/myslq/db');

class CustomEnvironment extends NodeEnvironment {
constructor(config) {
super(config)
}

async setup() {
await super.setup();
console.log(`Global Setup !!!!!!!!!`);
this.global.gObject = "I am global object"
this.global.liveUsers = await new MySql("Live Users");
this.global.stageUsers = await new MySql("Stage Users");
}

async teardown() {
console.log(`Global terdown !!!!!!!!!`);
await super.teardown();
this.global.gObject = "I am destroyed";
this.global.liveUsers.closeConnection();
this.global.stageUsers.closeConnection();
}

runScript(script) {
return super.runScript(script)
}

}

module.exports = CustomEnvironment;

为每个测试调用两次:

Global Setup !!!!!!!!!Global Setup !!!!!!!!!ERROR>>> Error: listen EADDRINUSE: address already in use 127.0.0.1:3306

因此它会尝试建立到同一端口的第二个连接 - 而我可以简单地使用现有连接。

在我看来,它的工作方式与定义没有区别

beforeAll(async () => {
});
afterAll(() => {
});

钩子(Hook)。

总结一下,问题是:使用 jest 命令(从而运行所有测试套件),我如何为所有测试调用一次设置函数并在它们之间共享全局对象?

最佳答案

setupteardown 确实针对每个测试套件执行,类似于顶级 beforeAllafterAll .

测试套件在单独的进程中运行。为每个测试套件初始化测试环境,例如jsdom 环境为每个套件提供假 DOM 实例,并且它们之间不能交叉污染。

如文档所述,

Note: TestEnvironment is sandboxed. Each test suite will trigger setup/teardown in their own TestEnvironment.

环境不适合全局设置和拆卸。 globalSetup and globalTeardown应该用于此。它们适用于设置和关闭服务器实例,这是文档示例显示的内容:

// setup.js
module.exports = async () => {
// ...
// Set reference to mongod in order to close the server during teardown.
global.__MONGOD__ = mongod;
};

// teardown.js
module.exports = async function () {
await global.__MONGOD__.stop();
};

由于这发生在父进程中,__MONGOD__ 在测试套件中不可用。

关于jestjs - 每个测试套件和跨测试用例 Jest 初始化和共享对象一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62609776/

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