Node Express中重复运行Jasmine测试出现“no specs found”问题求助
解决Jasmine重复运行测试时"no specs found"的问题
我懂你遇到的这个坑——第一次跑测试一切正常,第二次就直接提示找不到测试用例了,这其实是Node.js的模块缓存机制和Jasmine的测试注册逻辑共同导致的。
问题根源
当你第一次执行test.js时,Node.js会把这个文件的模块缓存起来,里面的describe、it这些测试定义代码会立刻执行,把测试用例注册到Jasmine的环境里。第二次调用jasmine.execute加载同一个文件时,Node.js直接从缓存里取模块,不会重新执行文件里的代码,自然也就没有新的测试用例被注册,Jasmine就会报"no specs found"。
解决方案:清除模块缓存
每次运行测试前,先把目标测试文件的模块缓存清掉,让Node.js重新加载并执行文件里的测试代码。修改你的jasmine-test.js如下:
function clearModuleCache(filePath) { // 获取测试文件的绝对路径(Node.js缓存用的是绝对路径) const modulePath = require.resolve(filePath); // 从Node的模块缓存中删除该文件 delete require.cache[modulePath]; } function jasmineExecute(fileName) { // 先清缓存,再初始化Jasmine clearModuleCache(fileName); var jasmine = new Jasmine({}); jasmine.onComplete(function(x) { if (x) { console.log("测试通过,准备重新运行..."); // 这里建议加个运行次数限制,不然测试一直过的话会无限循环 jasmineExecute("./test.js"); } else { console.log('Test failed : ' + fileName); } }); jasmine.execute([ fileName ]); } jasmineExecute("./test.js");
额外提醒
- 一定要注意无限循环的问题:如果你的测试一直通过,这段代码会无限重复运行,最好加个计数器,比如跑10次就自动退出。
- 如果你不想每次都新建Jasmine实例,也可以尝试复用同一个实例并重置其内部状态,但清除模块缓存是最直接有效的方案。
内容的提问来源于stack exchange,提问作者Bertrand Marechal
相关产品推荐
相关产品推荐

