开玩笑不在forEach函数内部执行测试用例

时间:2020-04-20 10:09:00

标签: javascript node.js jestjs

我试图在forEach块内的循环中执行测试用例,但是我要迭代的变量始终抛出未定义的情况。在beforeAll块中,我正在使用await从数据库中获取数据,并且将对象数组分配给变量,以便可以迭代该数组并对每个对象执行测试。但是当我尝试这样做时,它总是抛出 TypeError:无法读取未定义的属性'forEach',有人可以在这里说我在做什么吗?

sample.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);
    });
  });
});

1 个答案:

答案 0 :(得分:2)

玩笑测试可能异步运行,但它们是同步定义的。 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);
  });

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

// 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);
    });
  });