我试图在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);
});
});
});
答案 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);
});
});