【发布时间】:2020-10-17 22:37:45
【问题描述】:
我想在 jest 测试套件之间使用共享资源。我在互联网上阅读并发现this 可能是解决方案。但是每个测试文件都会调用setup。
我有两个测试文件links.test.js 和“subscritpions.test.js”。我通常用一个命令jest 来调用它们。
问题是我自定义环境custom-environment.js的setup函数:
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;
每次测试调用两次:
全局设置 !!!!!!!!! 全局设置!!!!!!!!! ERROR>>> Error: listen EADDRINUSE: address already in use 127.0.0.1:3306
所以它尝试建立到同一个端口的第二个连接——而我可以简单地使用现有的连接。
在我看来,它的工作方式与定义没有区别
beforeAll(async () => {
});
afterAll(() => {
});
钩子。
总结一下,问题是:使用jest 命令(从而运行所有测试套件),我如何为所有测试调用一次设置函数并在它们之间共享全局对象?
【问题讨论】:
标签: jestjs