茉莉花库"没有找到规格"当两次运行相同的测试时

时间:2018-04-24 07:27:08

标签: node.js jasmine-node

我希望能够从节点快速服务器运行两次相同的测试,但是注意到同一测试的第二次运行总是给出"没有找到规格"。

这是一个例子: 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上运行。 欢迎任何帮助。

1 个答案:

答案 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");