2012-01-17 56 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}"); 

我希望这将有助于你。