在Jasmine单元测试中没有分配全局变量
Global variable not being assigned in Jasmine unit test
我在Jasmine单元测试中遇到一些未定义全局变量的问题。我使用Squire模拟一些类,通过RequireJS注入依赖。下面是我的单元测试的一个精简示例:
我的'service'类(service.js)
define(['durandal/system', 'cache'],
function (system, cache) {
var dataservice = {
retrieveData: function () {
return cache.getCachedData();
}
};
return dataservice;
});
模拟'cache'依赖的fixture。
define(['Squire'], function (Squire) {
var injector = new Squire();
return {
initialize: function () {
injector.clean();
injector.mock('cache', {
getCachedData: function () {
return { item: "one" };
}
});
return injector;
}
};
});
And my spec:
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是未定义的。我希望它是虽然当我的夹具(上面的容器)把它拉进来。现在,如果我在define()的spec的顶部拉入'service',并在那里设置dataserviceModule,测试将其视为已定义。
为什么是我的容器。需要要么不设置变量一个范围更高,或丢失之间的测试运行?我读到这个关于提升的问题,但我没有在我的container.require.
看起来这实际上是一个竞争条件,因为在我的模块可以加载之前正在运行测试。我添加了waitsFor和一个锁存器,在我的模块加载后为真来解决这个问题。
如果有人遇到这种情况,请查看http://www.htmlgoodies.com/beyond/javascript/test-asynchronous-methods-using-the-jasmine-runs-and-waitfor-methods.html
相关文章:
- 为了避免创建全局变量,可以将所有变量分配给一个对象吗
- 将 Ajax 数据分配给全局变量时出现问题
- 没有在函数外部分配全局变量
- 未分配 JavaScript/jQuery 全局变量
- 将全局变量分配给以下 Javascript
- Web套接字在分配给全局变量时不起作用
- 将 rails 值分配给全局变量并在 javascript 中使用它
- 为函数中的现有数组(全局变量)分配新值不起作用.为什么
- 在 Jquery 中为语言切换器分配一个全局变量
- 如何将从$promise返回的数据分配给全局变量
- 我应该如何处理Resharpers检查器提示'使用可能未分配的属性或全局变量'
- 从async.waterfall分配全局变量
- 如何将函数分配给全局变量
- 将ajax响应分配给一个全局变量
- 从JSON文件中获得的值保留在解析函数上;t被分配给全局变量
- JS Geocoder无法为Google Maps变量分配全局变量
- 如何使用Node.js和Redis为for循环分配全局变量
- 是否有一种方法来猜测,如果一些全局变量已分配
- 使用全局变量为动态创建的元素分配唯一id和唯一名称
- 在Jasmine单元测试中没有分配全局变量