【发布时间】:2016-11-16 21:15:09
【问题描述】:
我在 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 未定义。我希望它是当我的夹具(上面的容器)将它拉入时。现在,如果我在定义()中的规范顶部拉入“服务”,并在那里设置 dataserviceModule,测试会将其视为定义.
为什么我的 container.require 要么没有将变量设置为更高的范围,或者在测试运行之间丢失了?我在提升时阅读了这个this question,但我没有在我的 container.require 中重新声明相同的变量名。
【问题讨论】:
标签: javascript unit-testing jasmine requirejs squirejs