Jest全局变量持续存在

时间:2018-02-02 02:25:35

标签: jest

我看到可以在Jest测试中指定global variables但是:

  

突变不会在其他测试文件的测试运行中保持不变。

是否可以对所有测试文件中存在的全局变量进行更改?

2 个答案:

答案 0 :(得分:1)

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

如果您需要一个全局变量(或任何其他变量)处于特定状态以使测试成功。您应该查看Jest的setup and teardown方法。

答案 1 :(得分:1)

即使您有多个测试文件,也可以使用Environment Variables在测试中携带这些变量。 Official docs在下面指出,无法通过测试访问任何全局变量:

注意:通过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 config中完成测试,以取消设置此变量:

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

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