我正在尝试为Backbone视图运行一些Jasmine单元测试,模拟Squire中的依赖项。
我的观点的依赖关系是Baseview
,ICanHaz模板和i18n翻译。
我在定义Squire和Backbone之后模拟了依赖关系,然后使用Squire注入器来要求我的视图。但是,当我通过Grunt运行测试时,我收到警告消息:
警告:没有执行任何规范,是否存在配置错误?使用--force继续。
这是我的规格:
define(['squire', 'backbone'], function (Squire, Backbone) {
var injector = new Squire();
mocks = {
'views/baseview': function () {
return Backbone.View.extend({
grabTemplate: function (options) { }
});
},
'text!templates/menu.htm': '',
'i18n!nls/menu': {}
};
injector.mock(mocks);
injector.require(['menu'], function (Menu) {
describe('Menu View', function () {
it('should be initialisable', function () {
var menu = new Menu();
expect(menu).toBeDefined();
});
});
});
});
有谁知道为什么我的基本单元测试没有被拿起来?
答案 0 :(得分:1)
经过一些试验和错误后,我找到了一个我非常满意的解决方案。我使用Jasmine的run
和waitsFor
调用修改了this post的解决方案:
define(['squire', 'backbone'], function (Squire, Backbone) {
describe('Menu View module', function () {
it('should be initialisable', function () {
var injector = new Squire(),
mocks,
menu,
loaded = false; //track whether our module has loaded
mocks = {
'views/baseview': function () {
return Backbone.View.extend({
grabTemplate: function (options) { }
});
},
'text!templates/menu.htm': '',
'i18n!nls/menu': {}
};
injector.mock(mocks);
injector.require(['views/menu'], function (Menu) {
menu = new Menu();
loaded = true;
});
waitsFor(function() {
return loaded;
//when this is true, we'll drop out of waitsFor
}, 'Menu module not loaded', 10000);
runs(function() {
expect(menu).toBeDefined();
});
});
});
});