Библиотека жасмина "спецификации не найдены" при выполнении одного теста дважды
Я хочу иметь возможность запускать один и тот же тест дважды с сервера экспресс-узла, но заметил, что второй запуск одного и того же теста всегда дает "спецификации не найдены".
Вот пример: 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 ответ
На самом деле это известная (хотя и труднодоступная) проблема с пакетом jasmine:
https://github.com/jasmine/jasmine-npm/issues/30
Суть в том, что Jasmine использует require() для загрузки ваших spec-файлов, и поскольку Node.JS будет загружать модуль только один раз за "сеанс", ваши spec-файлы не выполняются повторно, так что description ()/it() не называется.
Если у вас есть только один файл спецификации, вы можете исправить это, удалив модуль из кэша с помощью пакета 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");