2014-06-06 3 views
1

저는 AJAX를 통해로드하는 데이터 세트에 대한 통찰력을 반환하는 프로토 타입 메소드를 테스트하려고합니다.Jasmine이이 비동기 테스트에서 it()를 실행하지 않는 이유는 무엇입니까?

$.getJSON('../data/bryce.json').done(function(data) { 

    insights = new Insights(data); 

    describe("People Method", function() { 

     console.log('it executes this far'); 

     it("should return complete people data", function() { 

      console.log('but not this far'); 

      expect(insights.people()).toBeTruthy(); 

     }); 

    }); 

}); 

이 테스트 스위트를 실행하면 describe()가 실행되지만 it()은 실행되지 않습니다. 저는 일반적으로 JavaScript 테스트에 익숙하지 않아 뭔가 잘못하고 있다고 생각합니다. 그러나 그것이 무엇인지 나는 잘 모른다.

또한 작업중인 데이터가 거대한 JSON 파일이기 때문에이 파일에 포함 할 수 없습니다. 심지어 샘플 크기 버전을 제공하는 것도 가능하지 않습니다. 데이터 세트의 각 객체는 수백 줄의 길이입니다.

답변

1

Jasmine은 큐 메커니즘을 해제하고 실행될 작업을 대기열에 넣기 위해 describeit 함수를 모두 실행합니다.

재스민에서 비동기식으로 작업하려면 특정 패턴을 따라야합니다.

재스민 1.x에서

describe('some suite', function(){ 

    it('some test', function(){ 

    var data; 

    //Execute some async operation 
    runs(function(){ 
     $.get('myurl').done(function(d){ data = d; }); 
    }); 

    //Wait for it to finish 
    waitsFor(function(){ 
     return typeof data !== 'undefined'; 
    }); 

    //Assert once finished 
    runs(function(){ 
     expect(data.foo).toBe('bar'); 
    }); 

    }); 

}); 

재스민 1.x에서가 될 때까지 시간 초과 폴링에게 waitsFor 방법을 유지하기 위해 특별한 폴링 메커니즘을 사용하거나, true를 반환하고 최종 runs 방법을 실행합니다. 그것이 시작하고, 시험을 종료 할 때를 표시하는 시그널링 메카니즘을 사용하기 때문에

스민 2.X

describe('some suite', function(){ 

    var data; 

    beforeEach(function(done){ 
    $.get('myurl').done(function(d){ 
     data = d; 

     //Signal test to start 
     done(); 
    }); 
    }); 

    it('some test', function(done){ 
    expect(data.foo).toBe('bar'); 

    //Signal test is finished 
    done(); 
    }); 

}); 

스민 2.X는 조금 다르다. 사양에 따라 done 옵션을 사용하여 테스트를 동기화 할 수 있습니다.

done 메서드를 beforeEach에 사용하면 해당 메서드가 호출 될 때까지 테스트가 시작되지 않습니다.

it 함수에서 done 메서드를 사용하면 해당 메서드가 호출 될 때까지 테스트가 완료되지 않습니다.

두 가지 모두 테스트에서 비동기 동작을 효과적으로 관리하는 데 사용할 수 있습니다.

+0

굉장합니다. 내가 한 번 시험해 보도록 하렴. 감사. –

+0

는 매력처럼 일했습니다! 도와 줘서 고마워, 조쉬. –

+1

@BryceJohnson - 문제 없습니다. 기꺼이 도와 드리겠습니다. – Josh

관련 문제