2012-01-17 3 views
0

spec/category_keyword/categories.html에 내 비품을로드하려고합니다. 고정물의 내용은 keywordsListView.el 조명기가 어떻게 든로드되지 않았 음을 나에게 제안하는 정의되지 않은, 그러나jquery jasmine, fixtures not loaded

내 테스트

$(function() { 

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

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

}) 

입니다. 나는 재스민 슈트를 화산재로 보았고 조명기와 관련된 것을 보지 못했다. 나는 재스민 보석을 사용하고있다. 나는 무언가를 사용해야합니까?

+0

'el :' 'myCoolJQuerySelector' '만큼 멋있기 때문에보기를 테스트하는 것이 불필요합니다. 나는 언제나 그것을 테스트 할 때 쉽게 내 시야에 모의를 넣을 수 있도록 생성자의 views 요소를 전달합니다. –

+0

나는 당신을 이해하는지 모르겠습니다. keywordsListView.el은 어느쪽으로도 정의되지 않습니다. –

+0

테스트에서 새로운 DOM 엘을 생성하여 뷰로 전달하거나 모의 테스트를 통과하면 테스트하는 동안 DOM에 의존하지 않아도됩니다. 보기에서 DOM 쿼리는 테스트하려는 클래스에서 새 인스턴스를 만드는 것과 같은 반 패턴입니다. 물론 이것은 당신의 구체적인 질문에 대한 직접적인 대답이 아니었지만 로딩 설비로 엉망이되지 않는 방법을 보여줍니다. –

답변

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입니다. 그 자스민 - JQuery와 달리 당신이 할 수있는 다른 일이 백본의 요소를 만들 수있다 jasmine.getFixtures().fixturesPath = <something>

을 설정하여 구성하지 않는 한 비품이 spec/javascripts/fixtures 될 것으로 예상

$(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"); 
    }); 
}); 

참고 :이하면 뭔가를 할 수 있습니다 당신은 이것을 전달하지 않을 것입니다. 물론 이것을 위해서 서버가 생성 한 마크 업에 의존하지 않고 자신의 뷰를 렌더링해야합니다. 이것은 당신의 견해를 더욱 자급하게 만든다.

0

조명기를로드 한 후에는 모델에 대해 간첩을 사용하지 않고 백본 기능/메소드를 호출해야합니다.

그러면로드 된 HTML 콘텐츠를 찾을 수 있습니다.

처럼 :

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

나는이 의지가 당신에게 도움이되기를 바랍니다.