【发布时间】:2018-07-12 11:47:21
【问题描述】:
【问题讨论】:
-
我没有发现任何会在不同的测试文件中持续存在的东西,只有在每个测试文件内的测试之间。您可以在
jest的package.json键中使用globals,或者您可以设置一个ENV 变量,但您对这些变量所做的任何修改都不会在测试文件之间保留。如果我错了,请纠正我。
标签: jestjs
【问题讨论】:
jest 的package.json 键中使用globals,或者您可以设置一个ENV 变量,但您对这些变量所做的任何修改都不会在测试文件之间保留。如果我错了,请纠正我。
标签: jestjs
我认为没有办法做到这一点。我也不认为应该有办法做到这一点。测试用例应该能够彼此独立运行。允许对全局变量的某些突变在所有测试文件中持久存在可能会产生这样一种情况,即只有在另一个测试用例改变了某个变量之后运行测试用例才会成功。这种情况可能会导致测试非常脆弱,应该避免。
如果您需要全局变量(或任何其他变量)处于特定状态以使测试成功。您应该查看 Jest 的 setup and teardown 方法。
【讨论】:
即使您有多个测试文件,您也可以使用Environment Variables 在测试中携带这些变量。 Official docs 在下面声明任何全局变量都不能通过测试访问:
注意:任何通过 globalSetup 定义的全局变量只能在 globalTeardown 中读取。您无法检索在您的测试套件中定义的全局变量。
但测试使用相同的环境,因此您可以相应地设置和更改变量。
使用以下文件在配置中创建globalSetup:
// setup.js
module.exports = async () => {
process.env.TEST_VAR = "my-test-var";
};
您可以在测试中使用此变量:
// my-test.js
// ...
it("should read the test var from environment", async (done) => {
expect(process.env.TEST_VAR).toEqual("my-test-var");
process.env.TEST_VAR = "new-var";
expect(process.env.TEST_VAR).toEqual("new-var");
done();
});
// ...
您可以使用globalTeardown config 使用以下文件取消设置此变量:
// teardown.js
module.exports = async () => {
delete process.env.TEST_VAR;
};
请记住,设置环境变量而不正确使用环境变量是有风险的,可能会改变您的测试结果。我用它来传递一个持久变量。
【讨论】: