如何同步Jasmine.execute执行?需在其完成后执行后续操作
解决Jasmine Node.js中
jasmine.execute()与后续代码同步的问题 我之前在项目里也碰到过一模一样的问题——Jasmine Node的execute()居然不返回Promise,查官方文档的时候也懵了好一会儿,不过其实它给我们留了事件监听的口子来处理这个同步需求,咱们一步步来解决:
核心解决方案:监听complete事件
Jasmine Node实例会在所有测试执行完毕(不管成功还是失败)时触发complete事件,我们只需要在这个事件的回调里执行后续逻辑就行。修改你的代码如下:
var Jasmine = require('jasmine'); var jasmine = new Jasmine(); jasmine.loadConfig({ spec_dir: 'spec', spec_files: [ 'someTest.js', ] }); // 监听测试完成事件,所有测试结束后自动触发 jasmine.on('complete', function(passed) { // passed是布尔值,能告诉你所有测试是否全部通过 console.log(`测试执行结果:${passed ? '全部通过' : '有失败用例'}`); doSomething(); // 现在这行代码会在Jasmine完成后执行 }); jasmine.execute();
处理异步的后续逻辑
如果你的doSomething()是返回Promise的异步函数,直接在回调里用async/await就行:
jasmine.on('complete', async function(passed) { await doSomething(); // 等待异步操作完成 console.log("所有测试+后续操作都搞定了"); });
关于“同步执行”的疑问
很遗憾,Jasmine Node没有提供同步阻塞的执行方式。毕竟Node.js是单线程模型,同步阻塞会导致整个进程卡住,完全不符合异步IO的设计原则。事件监听是官方推荐、也是最合理的同步后续代码的方式,千万别用循环轮询这类hack手段,容易引发各种奇怪问题。
内容的提问来源于stack exchange,提问作者Adelin
相关产品推荐
相关产品推荐

