如何在 mocha 测试的描述部分重构异步代码
How to refactor async code in describe section of mocha test
我需要在 mocha 中测试创建元素数组的异步操作的结果,这些元素必须符合部分中分组的某些规范以提高可读性:
describe("tested", async function(){
var resultOfOperation = await tested()
for( var e of resultOfOperation ) {
describe("feature set 1", function(){
it("descriptionA", function() {
assert(true)
})
it("descriptionB", function() {
assert(true)
})
})
describe("feature set 2", function(){
it("descriptionC", function() {
assert(true)
})
})
}
})
上面的代码不起作用,因为 describe
不支持 async
函数,所以我需要以某种方式重构这个测试用例。我知道我可以在钩子中使用异步函数,但在这种情况下它没有帮助。
如何去掉 describe
中的 async 但保留测试服的结构以提高可读性?
您可以尝试通过将 --delay
标志传递给您的 mocha 实例来实现 delayed root suite 技术,这将为您提供特殊的 run
功能,您可以在套件运行时调用该功能准备开始,可以这样:
(async() => {
var resultOfOperation = await tested();
describe("tested", function() {
for (var e of resultOfOperation) {
describe("feature set 1", function() {
it("descriptionA", function() {
assert(true)
})
it("descriptionB", function() {
assert(true)
})
})
describe("feature set 2", function() {
it("descriptionC", function() {
assert(true)
})
})
}
});
run();
})();
我需要在 mocha 中测试创建元素数组的异步操作的结果,这些元素必须符合部分中分组的某些规范以提高可读性:
describe("tested", async function(){
var resultOfOperation = await tested()
for( var e of resultOfOperation ) {
describe("feature set 1", function(){
it("descriptionA", function() {
assert(true)
})
it("descriptionB", function() {
assert(true)
})
})
describe("feature set 2", function(){
it("descriptionC", function() {
assert(true)
})
})
}
})
上面的代码不起作用,因为 describe
不支持 async
函数,所以我需要以某种方式重构这个测试用例。我知道我可以在钩子中使用异步函数,但在这种情况下它没有帮助。
如何去掉 describe
中的 async 但保留测试服的结构以提高可读性?
您可以尝试通过将 --delay
标志传递给您的 mocha 实例来实现 delayed root suite 技术,这将为您提供特殊的 run
功能,您可以在套件运行时调用该功能准备开始,可以这样:
(async() => {
var resultOfOperation = await tested();
describe("tested", function() {
for (var e of resultOfOperation) {
describe("feature set 1", function() {
it("descriptionA", function() {
assert(true)
})
it("descriptionB", function() {
assert(true)
})
})
describe("feature set 2", function() {
it("descriptionC", function() {
assert(true)
})
})
}
});
run();
})();