Библиотека жасмина "спецификации не найдены" при выполнении одного теста дважды

Я хочу иметь возможность запускать один и тот же тест дважды с сервера экспресс-узла, но заметил, что второй запуск одного и того же теста всегда дает "спецификации не найдены".

Вот пример: 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");
Другие вопросы по тегам