2014-01-09 18 views
3

我正在尝试运行一些主干视图的Jasmine单元测试,嘲笑Squire中的依赖关系。注入与Squire.js依赖项时不会执行Jasmine规格

我的观点的依赖关系是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

经过一些试验和错误,我发现了一个我很模糊的解决方案。我修改了解决方案,从this post,利用茉莉的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(); 
      }); 
      }); 
    }); 
}); 
+1

@dansomething为什么这个编辑从8空间缩进到4把它的唯一目的是什么?这不是一个反映提高质量的编辑,而是一种反映个人风格偏好的编辑。 – scragar

+2

缩进更改是无意的。最后的大括号不翼而飞,错过了对齐。 – dansomething