【问题标题】:Jasmine specs not being executed when injecting dependencies with Squire.js使用 Squire.js 注入依赖项时未执行 Jasmine 规范
【发布时间】:2014-01-09 10:13:51
【问题描述】:

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

有人知道为什么我的基本单元测试没有得到采纳吗?

【问题讨论】:

    标签: javascript requirejs gruntjs jasmine squirejs


    【解决方案1】:

    经过一番反复试验,我找到了一个我隐约满意的解决方案。我修改了 this post 的解决方案,利用 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();
                });
              });
        });
    });
    

    【讨论】:

    • @dansomething 为什么编辑它的唯一目的是将其从 8 个空格缩进变为 4 个?这不是反映提高质量的编辑,而是反映个人风格偏好的编辑。
    • 缩进变化是无意的。右花括号丢失且未对齐。
    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    相关资源
    最近更新 更多