我希望能够从节点快速服务器运行两次相同的测试,但是注意到同一测试的第二次运行总是给出"没有找到规格"。
这是一个例子: jasmine-test.js:
function jasmineExecute(fileName) {
var jasmine = new Jasmine({});
jasmine.onComplete(function(x) {
if (x) {
jasmineExecute("./test.js"); // risk of infinite loop
}
else {
console.log('Test failed : ' + fileName);
}
});
jasmine.execute([
fileName
]);
}
jasmineExecute("./test.js");
test.js:
describe("We test that ", function() {
it("The return should be true", function() {
expect(true).toBe(true);
});
});
我的结果如下:
Randomized with seed 03122
Started
.
1 spec, 0 failures
Finished in 0.006 seconds
Randomized with seed 03122 (jasmine --random=true --seed=03122)
Randomized with seed 51883
Started
No specs found
Finished in 0.005 seconds
Incomplete: No specs found
Randomized with seed 51883 (jasmine --random=true --seed=51883)
Test failed : ./test.js
我在Jasmine 5.6.0和节点8.9.4上运行。 欢迎任何帮助。
答案 0 :(得分:2)
这实际上是jasmine包的已知(虽然难以找到)问题:
https://github.com/jasmine/jasmine-npm/issues/30
要点是Jasmine uses require()加载你的spec文件,因为Node.JS每个“session”只加载一次模块,你的spec文件不会重新执行,所以describe()/ it ()不被称为。
如果您只有一个spec文件,可以使用decache包从缓存中删除模块来解决此问题:
const Jasmine = require("jasmine")
const decache = require("decache")
function jasmineExecute(fileName) {
var jasmine = new Jasmine({});
jasmine.onComplete(function(x) {
if (x) {
decache("./test.js")
jasmineExecute("./test.js"); // risk of infinite loop
}
else {
console.log('Test failed : ' + fileName);
}
});
jasmine.execute([
fileName
]);
}
jasmineExecute("./test.js");