[mocha] 모카에서 단일 테스트 케이스의 시간 초과를 늘리는 방법

테스트 사례에서 네트워크 요청을 제출하고 있지만 때로는 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);


답변

es6 화살표 기능을 사용하려면 정의 .timeout(ms)끝에 a 를 추가 할 수 있습니다 it.

it('should not timeout', (done) => {
    doLongThing().then(() => {
        done();
    });
}).timeout(5000);

적어도 이것은 Typescript에서 작동합니다.


답변

(내가 오늘 이것에 부딪친 이후)

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 함수 가이 콜백 에 바인드 하고 시간 종료 함수를 제공 할 수 없습니다.

결론 : 시간 초과가 증가해야하는 기능에는 화살표 기능을 사용하지 마십시오.


답변

NodeJS에서 사용하는 경우 package.json에서 시간 초과를 설정할 수 있습니다.

"test": "mocha --timeout 10000"

다음과 같이 npm을 사용하여 실행할 수 있습니다.

npm test


답변

명령 행에서 :

mocha -t 100000 test.js


답변

다른 접근 방식을 사용하고 네트워크 리소스에 대한 호출을 스텁 또는 모의 객체로 대체하는 방법을 생각할 수도 있습니다. 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)항상 사용되는 것을 피하십시오.