3

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

有谁知道为什么我的基本单元测试没有被选中?

4

1 回答 1

1

经过一番试验和错误,我找到了一个我隐约满意的解决方案。我修改了这篇文章的解决方案,利用 Jasmine 的runwaitsFor调用:

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();
            });
          });
    });
});
于 2014-01-09T16:40:01.727 回答