使用Squire.js注入依赖项时,不会执行Jasmine规范

时间:2014-01-09 10:13:51

标签: javascript requirejs gruntjs jasmine squirejs

我正在尝试为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();
            });
        });
    });
});

有谁知道为什么我的基本单元测试没有被拿起来?

1 个答案:

答案 0 :(得分:1)

经过一些试验和错误后,我找到了一个我非常满意的解决方案。我使用Jasmine的runwaitsFor调用修改了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();
            });
          });
    });
});