jquery jasmine,装备没装

时间:2012-01-17 06:26:49

标签: backbone.js jasmine

我正在尝试在spec / category_keyword / categories.html中加载我的灯具。夹具的内容是

我的测试

$(function() {

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

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

})

然而,keywordsListView.el是未定义的,这向我建议夹具以某种方式不加载。我在萤火虫中看到了茉莉花套件,并没有看到任何与夹具有关的东西。我正在使用茉莉花宝石。我必须启用某些功能吗?

3 个答案:

答案 0 :(得分: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");
 })

})

答案 1 :(得分:0)

Jasmine本身不包含任何夹具加载,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");
  });
});

请注意,jasmine-jquery希望您的灯具位于spec/javascripts/fixtures,除非另有配置jasmine.getFixtures().fixturesPath = <something>

你可以做的另一件事是让骨干为你创建元素,而不是传入一个。当然,为此,你的视图需要渲染自己,而不是依赖于服务器生成的任何标记。这使您的视图也更加独立。

答案 2 :(得分:0)

加载灯具后,您必须调用骨干功能/方法,而不必为您的模型制作间谍。

然后您可以找到加载的HTML内容。

喜欢:

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

我希望这会对你有所帮助。