【问题标题】:jasmine and backbone and js templates茉莉花和骨干和js模板
【发布时间】:2011-12-29 19:46:59
【问题描述】:

您好,我正在尝试使用 jasmine 无头 webkit:http://johnbintz.github.com/jasmine-headless-webkit/

我一直在我的应用程序的主 HTML 文件中嵌入 js 模板。我的应用程序开始变得相当复杂,我想我可以使用 jasmine 给它更多的测试覆盖率。由于我的视图引用了我的主 HTML 文件中的 javascript 模板,因此我的视图会出错。有没有办法解决这个问题?我可以以某种方式重现我的应用程序 HTML 文件的状态吗?即,加载它的所有 js 模板,并在头部以正确的顺序加载供应商 javascripts?

【问题讨论】:

    标签: javascript backbone.js jasmine


    【解决方案1】:

    您可以在 jasmine 规范中加载 html 固定装置。见:https://github.com/velesin/jasmine-jquery

    loadFixtures('myfixture.html');
    $('#my-fixture').myTestedPlugin();
    expect($('#my-fixture')).to...;
    

    无论如何,您都可以使用backbone.js 和jasmine 检查我的示例项目:https://github.com/lucassus/tdd-with-backbonejs 并检查我在现实生活中是如何使用这种技术的。 我还要写一篇关于用茉莉花测试主干观点的博文:http://blog.bandzarewicz.com

    【讨论】:

      【解决方案2】:

      当然,您可以将模板文件添加到您的 jasmine 测试运行器页面。

      另一种解决方案是模拟出您的视图 DOM 元素。您可以在构造函数中插入元素,例如new View({el: $($('myTemplate').html())})。这样做,您可以在测试中添加元素模拟或间谍,而无需基于您的模板创建 DOM 元素:

      beforeEach(function() {
          el = {bind: function(){}};
          spyOn(el, 'bind');
          var OrderListView = new OrderSumView({el: el, model: model});
      });
      
      it('it should render the sum after firing the remove event', function() {
      
          //test that bind('click', someFunction) was called to your element
          expect(el.bind).toHaveBeenCalledWith('click', model.bind.argsForCall[0][1]);
      
          // fire up the function that was bind to the click event
          el.bind.argsForCall[0][1]() 
      })
      

      使用此解决方案,您可以在大多数情况下完全模拟 html。它是我们测试大型 GWT 应用程序的方式。使用 GWT 比使用主干要容易得多,因为我们处于 JAVA 世界,但原理是一样的。不要测试 DOM,只测试你的业务逻辑。如果以这种方式为我的私人骨干项目做到这一点并且效果很好。

      也看看这个 SO:Stub out a jQuery selector call?

      【讨论】:

      • 感谢您的回答 Andreas,但我部分不同意您的观点。由于 Backbone 在设计上是一个前端框架,我们希望大部分核心/业务逻辑在服务器端处理,尽管 API 调用例如。在这个配置中,我的观点是我们应该只编写集成测试,以便检查客户端的正确数据显示。我可能误解了一些东西,但我认为您必须测试 DOM 元素,而不仅仅是对象的状态。
      猜你喜欢
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      相关资源
      最近更新 更多