2017-01-16 2 views
0

비동기 기능이있는 코드에 대해 jasmine 사양을 만들려고합니다. 이 내 문제는 시험 enviros에서 실행에 setTimout이settimeout이없는 Jasmine 비동기 테스트

이 깨지기 쉬운, 즉 지연 될 수 있습니다, 완료 기능과의 setTimeout을 사용하여

it("takes a long time", function(done) { 
      setTimeout(function() { 
      done(); 
      }, 9000); 
     }); 

: 재스민 문서에서

IT는 예를 보여줍니다 시간 초과를 사용할 필요가없는 그러한 테스트에 대한 대안 솔루션? 이 예 setTimeout 미리

+0

콜백, 약속 또는 대기로 비동기 함수의 결과를 계산하는 방법은 무엇입니까? –

+0

[jasmine-co] (https://www.npmjs.com/package/jasmine-co)를보십시오. 이 npm 패키지를 사용하면'yield'를 사용하고'setTimeout()'과'done()'을 버릴 수 있습니다. – jengeb

답변

1

덕분 실제로 시험되는 함수이다. 비동기 함수의 대표적인 예입니다. 요점은 테스트가 완료되면 명시 적으로 done()으로 전화해야한다는 것입니다. 코드는 같은 보일 것입니다 : 문서화 된 기능은 장기 실행 방법 다음 done 콜백을 사용하여 설명하기위한 것입니다

it("takes a long time", function(done) { myMethod('foo', 'bar', function callback() { assert(...) done(); }); // callback-style }

it("takes a long time", function(done) { myMethod('foo', 'bar').then(function() { assert(...) done(); }); // promise-style });

it("takes a long time", async function(done) { await myMethod('foo', 'bar') assert(...) done() });

0

을하고, 사용하지 않아야합니다 실제 테스트.

일반적으로 done 함수를 호출 할 콜백 함수를 제공해야합니다. 예를 들어, 데이터를 기록하는 데 오랜 시간이 걸렸습니다 파일을 포함하는 단위 테스트를 작성할 수 : 당신은 일반적으로 본체 내의 파일에 기록하고 싶지 않아요으로

it("writes a lot of data", function(done) { 
    var fd = 999; // Obtain a file descriptor in some way... 

    fs.write(fd, veryLongString, function (err, written, string) { 
    // Carry out verification here, after the file has been written 
    done(); 
    }); 

다시, 이것은 단지 예시 단위 테스트. 그러나 약간의 장기간 작동 후에 done으로 전화 할 수 있습니다.