2013-01-20 2 views
1

DS.FixtureAdapter를 사용하여 ember-data의 재스민 테스트 (현재 마스터 사용)를 시도하고 있습니다. 나는 (응용 프로그램 네임 스페이스를 만들려고 노력하거나하지 않고) 아래 코드에서 수십 가지 변형을 시도했다. 필자는 엠버 데이터 소스를 테스트 해보고 무슨 일이 일어나고 있는지 알아 보았을뿐만 아니라 예로서 엠버 데이터 자체의 테스트를 참조했다.Jasmine 및 DS.FixtureAdapter가있는 Ember 데이터 테스트

(나는 또한 Ember.run 블록을 사용하여, Person.find (1)의 변화를 시도하고 재스민 대기)의.

시도해도 store.find(Person, 'test')은 결과를 반환하지만 속성 중 하나를 얻으려고하면 null이됩니다 (테스트 어설 션이 실패 함). 나는 무엇을보고 있지 않습니까? 어떤 도움을 주셔서 감사합니다!

describe "a test", -> 
    store = null 
    Person = null 

    beforeEach -> 

    store = DS.Store.create 
     revision: 11 
     adapter: 'DS.FixtureAdapter' 

    Person = DS.Model.extend 
     firstName: DS.attr('string') 
     lastName: DS.attr('string') 
     age: DS.attr('number') 

    it "works or does it", -> 
    Person.FIXTURES = [{ 
     id: 'test' 
     firstName: 'Kyle' 
     lastName: 'Stevens' 
     age: 30 
     }] 

    kyle = store.find(Person, 'test') 
    expect(Em.get(kyle, 'firstName')).toEqual('Kyle') 

답변

3

내가하려고 무엇이든간에, store.find (사람, '테스트') 결과를 돌려줍니다 만, null의 속성 결과 중 하나를 (테스트 주장 실패) 얻기 위해 시도. 나는 무엇을보고 있지 않습니까? 어떤 도움을 주셔서 감사합니다!

는 타이밍 문제입니다. store.find()을 호출하면 쿼리가 비동기 적으로 실행되고 모델 약속이 반환됩니다. 즉, 컨트롤이 테스트로 돌아 왔을 때 쿼리가 여전히 실행 중 (또는 실행되도록 예약 됨)이므로 기대가 실패하게됩니다.

이것은 우리가 타다 남은 사랑에 대해서 무엇인가, 그것은 데이터 값이 데이터를 사용할 수있을 때 바인딩을 통해 자동적으로 업데이트 될 예정이 현재와 신뢰 것처럼 앱이 카일을 처리 할 수 ​​있음을 의미합니다.

물론이 모든 마술은 테스트가 통과하지 못하는 경우 큰 영향을주지 않습니다. 다음은 몇 가지 다른 방법은 다음과 같습니다

1) 더 블랙 박스 테스트 방법을 사용하고 단지 이름이 발견이라고 한의 propertly 내에서 100 밀리 설정되어 있는지 확인 할 수 대신 didLoad의)는 didLoad 콜백

2

kyle = store.find(Person, 'test'); 
kyle.on('didLoad', function() { 
    console.log('should = kyle: ', Em.get(kyle, 'firstName')); 
}); 
등록)), "firstName을 '을 Em.get (카일; CONSOLE.LOG을 - 물론 이것은 (취성 시험을'해야 = 카일 ' Ember.run.later (이 함수() { CONSOLE.LOG 이어질 수 ('should = kim :', Em.get (App.kim, 'firstName')); }, 100); (

waitsFor(function() { 
    return Em.get(kyle, 'firstName') == 'Kyle'; 
    }, "x to be set to 5", 100); 

작업이 JSBIN를 참조하십시오

가 나는 자스민 시험에서 당신이 실행에 설정 코드를 래핑() 메소드 예상대로 값이 설정되어 있는지 확인합니다 waitsFor를 사용할 수 있다고 생각 비 자스민) 예 : http://jsbin.com/apurac/4/edit

는 자스민과 비동기 테스트에 대한 팁이 게시물을 참조 : 또한 http://blog.caplin.com/2012/01/17/testing-asynchronous-javascript-with-jasmine/

을을 설정해야 모든 테스트에 210. 자세한 내용은 다음을 참조하십시오. Is it recommended to set Ember.testing = true for unit tests?

+0

감사합니다. 귀하의 답변과 게시 한 링크를 읽음으로써 1 톤을 배웠습니다. Ember.testing = true를 사용할 때마다 Ember.run()을 사용해야한다는 에러가 발생했습니다. (어쨌든!) 어쨌든, 나는 그것을 작동 시켰습니다. 다음은 내가 결국에 끝난 것입니다 : https://gist.github.com/4581023 – kstevens715