我试图通过循环异步调用返回的数组来动态生成测试。我只是不知道如何做到这一点 - 使用摩卡或使用笑话。为了说明如何使用代码,以下同步示例有效:
describe("Test using various frameworks", () => {
["mocha", "jest"].forEach(framework => {
it(`Should test using ${framework}`, () => {
expect(true).toBe(true);
});
});
});
但是,如果该数组是异步获取的,我无法让测试框架等到获取该数组后再尝试循环它。
async function getFrameworks() {
//TODO: get it from some async source here
return ["mocha", "jest"];
}
describe("Test using various frameworks", () => {
var frameworks;
//before() instead of beforeAll() if using mocha
beforeAll(async ()=> {
frameworks = await getFrameworks();
});
frameworks.forEach(framework => {
it(`Should test using ${framework}`, () => {
expect(true).toBe(true);
});
});
});
这失败了Cannot read property 'forEach' of undefined
。我尝试过各种使用组合async/await
and Promise
并传递一个done
回调但无济于事。
我最接近这个的是使用 Mocha 的--delay https://mochajs.org/#delayed-root-suite标志,但这只能解决部分问题。在我的实际用例中我真正想做的是在中运行一些异步初始化before()
or beforeAll()
然后我用它来动态生成测试。
有关如何使用摩卡或笑话来执行此操作的任何指示吗?
为了回答我自己的问题,我没有找到使用 Jest 或 Mocha 来做到这一点的方法,但我可以使用tap http://www.node-tap.org/- 我通过它使用过babel-tap https://www.npmjs.com/package/babel-tap.
import tap from "babel-tap";
async function getFrameworks() {
//TODO: get it from some async source here
return ["mocha", "jest"];
}
getFrameworks().then(frameworks => {
frameworks.forEach(framework => {
tap.test(`Should test using ${framework}`, (tester) => {
tester.ok("It works!");
});
});
});
不过,您还可以做更多事情。您可以通过进一步调用来创建嵌套范围tester.test()
例如。另外,自从tap
没有这个概念before
, after
等等(除非你使用类似摩卡的 DSL http://www.node-tap.org/mochalike/),您可以简单地使用命令式代码来模拟等效的行为。
另外,您还可以自由使用async/await
测试内部的样式调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)