2011-12-29 109 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