cur*_*zen 5 asynchronous mocha.js jestjs
我试图通过循环从异步调用返回的数组来动态生成测试。我只是不知道如何做到这一点 - 无论是使用 mocha 还是使用 jest。为了说明使用代码,以下同步示例有效:
describe("Test using various frameworks", () => {
["mocha", "jest"].forEach(framework => {
it(`Should test using ${framework}`, () => {
expect(true).toBe(true);
});
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果该数组是异步获取的,则我无法让测试框架等到数组被获取后再尝试对其进行循环。
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
这不能说Cannot read property 'forEach' of undefined。我已经尝试了所有使用排序的组合async/await和Promise并传递done回调,但无济于事。
我最接近的是使用 Mocha 的--delay标志,但这只能解决部分问题。在我的实际用例中,我真正想做的是在before()orbeforeAll()钩子中运行一些异步初始化,然后我用它来动态生成测试。
关于如何使用 mocha 或 jest 执行此操作的任何指示?
为了回答我自己的问题,我没有找到使用 Jest 或 Mocha 来做到这一点的方法,但我可以使用tap来完成它- 我通过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!");
});
});
});
Run Code Online (Sandbox Code Playgroud)
不过,您还可以做更多事情。tester.test()例如,您可以通过进一步调用来创建嵌套范围。另外,由于tap没有 等概念before(after除非您使用类似 Mocha 的 DSL),因此您可以简单地使用命令式代码来模拟等效行为。
此外,您可以async/await在测试中自由使用样式调用。
| 归档时间: |
|
| 查看次数: |
1495 次 |
| 最近记录: |