2011-12-29 137 views
2

嗨,我试图用茉莉花无头WebKit的:我的应用程序的主HTML文件里http://johnbintz.github.com/jasmine-headless-webkit/茉莉和骨干和js模板

我已经嵌入JS模板。我的应用开始变得相当复杂,我想我可以用茉莉花来给它更多的测试覆盖。由于我的视图引用了我主HTML文件中的JavaScript模板,所以我的视图将会出错。有什么方法可以解决这个问题吗?我能以某种方式重现我的应用程序的HTML文件的状态吗?也就是说,加载所有的js模板,并以正确的顺序加载供应商的javascripts头部?

回答

0

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

另一种解决方案是模拟你的视图DOM元素。您可以在构造函数中插入元素,如new View({el: $($('myTemplate').html())})。有了这个解决方案可以完全模拟出在大多数情况下,HTML

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]() 
}) 

:这样做,您可以在您的测试添加元素的模拟或间谍,而无需创建基于模板的DOM元素。它是我们测试我们的大型GWT应用程序的方式。使用GWT比使用主干更容易,因为我们处于JAVA世界,但原理是一样的。不要测试DOM,只需测试你的业务逻辑。如果这样做,我的私人骨干项目,它运作良好。

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

+0

感谢您的回答安德烈亚斯,但我部分不同意你。由于Backbone被设计为一个前端框架,我们期望核心/业务逻辑的大部分都可以在服务器端处理,尽管API调用例如。 在这个配置中,我的观点是我们应该只写集成测试,以便检查客户端的正确数据显示。我可能误解了一些东西,但我认为你必须测试DOM元素,而不仅仅是对象的状态。 – Arnlen 2014-05-12 13:33:38

1

您可以在茉莉规格加载HTML灯具。请参阅:https://github.com/velesin/jasmine-jquery

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

反正你可以检查我的样本项目,Backbone.js的和茉莉:https://github.com/lucassus/tdd-with-backbonejs,检查我是如何在现实生活中使用这种技术。 另外我要写关于茉莉花测试骨干的意见的博客文章:http://blog.bandzarewicz.com