我在Jasmine單元測試中看到一個全局變量未定義的問題。我正在使用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是不確定的。我期望它是當我的fixture(上面的容器)將它拉入時。現在,如果我在define()中的規範頂部提供'service',並在那裏設置dataserviceModule,那麼測試會將其視爲已定義。
爲什麼我的container.require要麼不將變量設置爲更高的範圍,要麼在測試運行之間丟失一個變量?我在吊裝周圍讀取這個this question,但是我沒有在我的container.require中重新聲明相同的變量名稱。