테스트 사례에서 네트워크 요청을 제출하고 있지만 때로는 2 초 이상 (기본 시간 초과)이 걸립니다.
단일 테스트 케이스의 시간 초과를 늘리려면 어떻게합니까?
테스트 사례에서 네트워크 요청을 제출하고 있지만 때로는 2 초 이상 (기본 시간 초과)이 걸립니다.
단일 테스트 케이스의 시간 초과를 늘리려면 어떻게합니까?
답변:
여기 있습니다 : http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
화살표 기능의 경우 다음과 같이 사용하십시오.
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
끝 부분에 추가it(...).timeout(500)
es6 화살표 기능을 사용하려면 정의 .timeout(ms)
끝에 a 를 추가 할 수 있습니다 it
.
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
적어도 이것은 Typescript에서 작동합니다.
.timeout
mocha의 DefinitelyTyped 타이핑에는 포함되어 있지 않습니다 : i.imgur.com/jQbWCn1.png- 기존 함수를 사용 this.timeout(2000)
하거나 this.slow(500)
오류없이 컴파일
it
하지 않습니다 describe
.
describe()
또는 을 위해 이것을 할 수있는 방법이 context()
있습니까?
.timeout
는 이제 DefinitelyTyped의 Mocha 타이핑에 포함되어 있습니다 : Mocha.IRunnable
. 그러나 이러한 테스트를 실행하기 위해 Webstorm IDE를 사용하는 경우주의해야합니다. 어떤 이유로 든 WebStorm의 Mocha 통합 플러그인은 여전히 .timeout()
추가 된 Mocha 테스트를 인식하지 못합니다 (옆에 '실행'버튼이 나타나지 않음). 따라서 this.timeout()
대신 화살표 기능을 사용하지 않도록 권장 합니다.
(내가 오늘 이것에 부딪친 이후)
ES2015 지방 화살표 구문을 사용할 때주의하십시오.
이것은 실패합니다 :
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
편집 : 왜 실패합니까 :
주석에서 @atoth가 언급했듯이, 팻 화살표 기능에는 자체 바인딩 이 없습니다 . 따라서 it 함수 가이 콜백 에 바인드 하고 시간 종료 함수를 제공 할 수 없습니다.
결론 : 시간 초과가 증가해야하는 기능에는 화살표 기능을 사용하지 마십시오.
this
화살표 함수 에는 바인딩 이 없습니다 . 같은 방식으로 다른 기능을 제안하는 것과 같은 방식은 아닙니다. 어휘 범위 만 있습니다. 존재하지 않는 바인딩 할 수 없습니다. 이유 즉 .bind
, .call
등이 작동하지 않습니다.
this
.
다른 접근 방식을 사용하고 네트워크 리소스에 대한 호출을 스텁 또는 모의 객체로 대체하는 방법을 생각할 수도 있습니다. Sinon을 사용하면 개발 노력에 집중하여 앱을 네트워크 서비스에서 분리 할 수 있습니다.
테스트 navegation의 경우 Express
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
이 예에서 테스트 시간은 4000 (4 초)입니다.
참고 : 테스트 시간 내에 호출 된 setTimeout(done, 3500)
것보다 부수적 done
이지만 clearTimeout(timeOut)
항상 사용되는 것을 피하십시오.
이것은 나를 위해 일했다! before ()와 함께 작동하도록 할 항목을 찾을 수 없습니다
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});