0

我试图在 forEach 块内的循环中执行测试用例,但我正在迭代的变量总是抛出未定义的。在 beforeAll 块中,我使用 await 从数据库中获取数据,并将对象数组分配给一个变量,以便我可以迭代数组并为每个对象执行测试。但是当我尝试这样做时,它总是抛出TypeError: Cannot read property 'forEach' of undefined,谁能说我在这里做错了什么?

样本.test.ts

describe('Test suite ', () => {
  let d: any;
  beforeAll(async () => {
    connectToDatabase();
    d = await r.retriveDataFromDb1();
  }, 200000);
  describe('Test suite 1', () => {
    d.forEach(function(v: any) {
      it('test case', async () => {
        console.log(v);
      }, 20000);
    });
  });
});
4

1 回答 1

2

Jest 测试可以异步运行,但它们是同步定义的。beforeAll仅在测试开始时执行,此时应该知道测试。

它可以是动态创建断言的单个测试:

  let d: any;
  beforeAll(async () => {
    connectToDatabase();
    d = await r.retriveDataFromDb1();
  }, 200000);

  describe('Test suite 1', () => {
    it('test case', () => {
      d.forEach((v: any) => {
        expect(some).toBe(valueThatDependsOnV);
      });
    }, 20000);
  });

或者异步设置应该在允许的全局设置中进行:

// setup.js
module.exports = async () => {
  connectToDatabase();
  global.__d__ = await r.retriveDataFromDb1();
};

// teardown.js
module.exports = async function () {
  // disconnect from database
};

__d__将在所有测试中可用:

  describe('Test suite 1', () => {
    __d__.forEach((v: any) => {
      it('test case', async () => {
        ...
      }, 20000);
    });
  });
于 2020-04-20T12:01:02.450 回答