开玩笑的全局变量持续存在



我看到可以在Jest测试中指定全局变量,但是:

对于其他测试文件,不会在测试运行中保留突变。

有没有办法更改在所有测试文件中保留的全局变量?

您可以使用

Environment Variables在测试中携带这些变量,即使您有多个测试文件也是如此。官方文档在下面指出,任何全局变量都不能通过测试访问:

注意:通过 globalSetup 定义的任何全局变量只能在 globalTeardown 中读取。无法检索此处在测试套件中定义的全局变量。

但是测试使用相同的环境,因此您可以相应地设置和更改变量。

  1. 使用以下文件在配置中创建globalSetup

     // setup.js
     module.exports = async () => {
       process.env.TEST_VAR = "my-test-var";
     };
    
  2. 您可以在测试中使用此变量:

     // 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();
     });
     // ...
    
  3. 您可以取消设置此变量,测试已完成globalTeardown配置使用以下文件:

      // teardown.js
      module.exports = async () => {
        delete process.env.TEST_VAR;
      };
    

请记住,设置和未正确使用环境变量是有风险的,可能会更改测试结果。我用它来传递一个持久变量。

我认为

没有办法做到这一点。我也不认为应该有办法做到这一点。测试用例应该能够彼此独立运行。允许在所有测试文件中保留全局变量的某些更改可能会造成这样一种情况,即只有在另一个测试用例更改了某个变量之后运行测试用例时,测试用例才会成功。这种情况可能会导致非常脆弱的测试,应避免使用。

如果您需要全局变量(或任何其他变量(处于特定状态才能使测试成功。您应该研究Jest的设置和拆卸方法。

最新更新