2012-01-17 57 views
0

我試圖在spec/category_keyword/categories.html中加載我的燈具。燈具的內容是jquery jasmine,燈具未加載

我的測試

$(function() { 

    beforeEach(function(){ 
    keywordsListView = new KeywordsListView({ 
     el: $("#keywords_list") 
    }) 
    }) 

it("should ...", function() { 
    expect(keywordsListView.el.attr("id")).toEqual("keywords_list"); 
}) 

}) 

然而,keywordsListView.el未定義這表明,我認爲燈具不知何故未加載。我在螢火蟲中看到了茉莉花套件,並沒有看到與夾具有關的任何東西。我正在使用茉莉花寶石。我必須啓用某些功能嗎?

+0

像'el:''myCoolJQuerySelector'一樣酷,它使測試視圖變得不必要很難。我總是傳入構造函數中的views元素,以便在測試時可以輕鬆地將模型放入視圖中。 – 2012-01-17 06:55:35

+0

我不確定我瞭解你。 keywordsListView.el是不確定的。 – 2012-01-17 07:00:05

+0

在測試中,您可以創建一個新的DOM el並傳入您的視圖,或者更好地傳遞一個模擬,因此您在測試時不依賴於DOM。在您的視圖中查詢DOM是一種反模式,例如在您想測試的類中創建新實例。當然,這不是對你的具體問題的直接回答,而是展示了一種不加載裝置的方法。 – 2012-01-17 07:13:51

回答

0

看着這個,我不認爲測試可以訪問您的keywordsListView變量。如前所述,在beforeEach函數上聲明keywordsListView變量並將其填充到beforeEach中。

$(function() { 

    var keywordsListView; 

    beforeEach(function(){ 
    keywordsListView = new KeywordsListView({ 
     el: $("#keywords_list") 
    }) 
    }) 

it("should ...", function() { 
    expect(keywordsListView.el.attr("id")).toEqual("keywords_list"); 
}) 

}) 
0

茉莉花本身不包含任何固定裝置裝載的HTML記者給你一個div#jasmine_content是茉莉不會碰及是你寫HTML如果需要的話。如果你需要能夠加載更復雜的燈具,還有其他插件可以爲你做到這一點。我曾經使用過的唯一一個是jasmine-jquery。有了這個,你可以這樣做:

$(function() { 
    beforeEach(function(){ 
    loadFixtures('category_keyword/categories.html'); 
    keywordsListView = new KeywordsListView({ 
     el: $("#keywords_list") 
    }); 
    }); 

    it("should ...", function() { 
    expect(keywordsListView.el.attr("id")).toEqual("keywords_list"); 
    }); 
}); 

需要注意的是茉莉花的jQuery希望您的燈具將在spec/javascripts/fixtures除非通過設置jasmine.getFixtures().fixturesPath = <something>

你可以做的另一件事是讓骨幹創造的元素,否則配置你不通過一個。當然,爲此,你的視圖將需要呈現它自己,而不是依賴於服務器生成的任何標記。這使得您的視圖更加獨立。

0

加載你的燈具後,你必須調用你的骨幹函數/方法,而不用爲你的模型製作間諜。

然後你找到了你的HTML內容。

像:

loadFixtures("/path/to/fixtures.html");   
SpyOnObj.functionname();       
expect($('body')).toHaveId("{ELEMENT_ID}"); 

我希望這將有助於你。