У меня возникли проблемы с модульным тестом Жасмин, который видит глобальную переменную как неопределенную. Я использую Squire для издевательства над некоторыми классами с зависимостями, вводимыми через RequireJS. Вот урезана пример моего модульного тестирования:Глобальная переменная, не назначаемая в модульном модуле Жасмин
Моего класса «Сервис» (service.js)
define(['durandal/system', 'cache'],
function (system, cache) {
var dataservice = {
retrieveData: function() {
return cache.getCachedData();
}
};
return dataservice;
});
Моей арматура издеваться «Кэш» зависимость.
define(['Squire'], function (Squire) {
var injector = new Squire();
return {
initialize: function() {
injector.clean();
injector.mock('cache', {
getCachedData: function() {
return { item: "one" };
}
});
return injector;
}
};
});
И моя спецификация:
define(['dataservice_fixture', 'durandal/system'],
function (testFixture, system) {
var container = testFixture.initialize();
var dataserviceModule;
container.require(['service'], function (preparedDataservice) {
dataserviceModule = preparedDataservice;
});
describe('The data service ', function() {
it('should exist.', function() {
expect(dataserviceModule).toBeDefined();
});
});
});
В моем 'должен существовать' тест, dataserviceModule не определено. Я бы ожидал, что это произойдет, когда мой прибор (контейнер выше) втянет его. Теперь, если я вытащил «сервис» в верхней части моего spec в define() и установил там dataserviceModule, тест видит его как определенный ,
Почему именно мой контейнер. Требуется либо не устанавливать переменную одну область выше, либо быть потерянной между этим и запуском теста? Я прочитал это this question вокруг подъема, но я не повторно объявляю одно и то же имя переменной в моем контейнере.