jasmine-node 비동기 사양에서 시간 제한을 어떻게 변경합니까?


91

run / waitsFor 블록에 의존하지 않고이 테스트를 통과하려면 어떻게해야합니까?

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){

         expect(body).toEqual("hello world");

         done();
     });
});

답변:


106

Jasmine 문서 에 따라 사양에서 직접 설정할 수 있습니다 .

describe("long asynchronous specs", function() {

    var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

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

    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});

예, jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;가치를 변경하는 것은 Jasmine + Jest를 사용하여 처음부터 새로 구축 된 새로운 설정에 대한 트릭이었습니다. 예상대로 작동합니다.
Ignacio Segura

나는 @willydee에 동의하고 cloudinary로 테스트를 실행하는 데 문제가 있었고이 작은 조각이 내 구조에 왔습니다.
Dev Yego

1
아마도 이것이 it. 당신이 시험에있어 그 때까지는, done무엇이든 이미 후크로 갖고있는 것 같아요 DEFAULT_TIMEOUT_INTERVAL예전 it시작합니다.
ruffin


43

전역 Jasmine-Node 시간 제한을 설정하려면 다음을 수행하십시오.

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

jasmine.DEFAULT_TIMEOUT_INTERVAL을 설정하여 완료되었다고 주장 하는 README 문서 의 잘못된 정보에도 불구하고 디버깅을 통해 .getEnv () 부분을 알아 낸 개발자 Gabe Hicks에게 감사드립니다 .

하나의 it ()에 대해서만 사용자 지정 시간 제한을 설정하려면 시간 제한 (밀리 초)을 세 번째 인수 (문자열 문과 함수 뒤)로 전달해 볼 수 있습니다. 이 수행되고 있음을의 예 여기에 ,하지만 사용자 정의 제한 시간이 더 이상 재스민의 기본값이 아닌 있다면 무슨 일이 일어날 지 모르겠어요. 실패 할 것으로 예상합니다.


28
2014 년이 답변에 걸림돌이되는 사람을위한 업데이트 : Jasmine 2 설정 jasmine.DEFAULT_TIMEOUT_INTERVAL이 작동합니다.
Simon Groenewolt 2014

2
Jest + Jasmine을 사용하는 새로운 설정에서 저에게 효과적입니다. jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;모든 테스트에 사용하는 전역 구성 파일에 방금 추가 했으며 예상대로 작동합니다.
Ignacio Segura

23

이제 it함수 의 마지막 인수로 추가 할 수있는 것 같습니다.

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

11

Angular에서 다음을 설명 블록 외부에 넣으십시오.

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

.spec.ts 파일의 모든 테스트에 적용됩니다.


3

describe문장 뒤에 넣어 :

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

2

추가 : jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;도우미 파일에서 나를 위해 일했습니다.


1

감시하지 않는 이유는 무엇 setTimeout()입니까?

다음과 같은 것 :

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

1
감사. 이들은 통합 테스트이며 node.js는 종종 느린 외부 서비스를 호출합니다.
브라이언 낮은

이것은 훌륭합니다. 실제 타임 아웃을 기다리지 않고도 타임 아웃을 테스트 할 수 있습니다
Guillaume

이런 식으로 우리는 시간의 흐름을 행사하지 않고 fn을 즉시 호출하지 않지만 원본은 다음주기 전에 호출하지 않습니다.
André Werlang 2017

0

제 경우에는 여러 테스트 케이스가 있었고 앞서 언급 한 솔루션을 사용하는 동안 다음을 사용했습니다.

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

DEFAULT_TIMEOUT_INTERVAL은 첫 번째 테스트 케이스에서 업데이트되지 않았으므로 다음을 추가해야합니다.

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

내 코드에 모든 테스트를 성공적으로 실행합니다.


-17

다음 파일에서 j $ .DEFAULT_TIMEOUT_INTERVAL을 10000으로 변경하십시오. npm \ node_modules \ jasmine-core \ lib \ jasmine-core


테스트가 실행될 때마다 라이브러리가 설치되는 시나리오에는 유용하지 않습니다. 예 :-클라우드에서 CI 실행.
domino_katrino
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.