모카의 기본 시간 초과 변경


161

단위 테스트 파일 my-spec.js가 있고 mocha로 실행중인 경우 :

mocha my-spec.js

기본 시간 초과는 2000ms입니다. 명령 줄 매개 변수를 사용하여 부분 테스트를 위해 덮어 쓸 수 있습니다.

mocha my-spec.js --timeout 5000

모든 테스트에 대해 기본 시간 초과를 전체적으로 변경할 수 있습니까? 즉, 다음과 같이 호출하면 기본 시간 초과 값이 2000ms와 다릅니다.

mocha my-spec.js

Mocha의 공식 웹 사이트 에서도 이에 대해 자세히 설명합니다.
RaviRokkam

답변:


305

기본적으로 Mocha는 test/mocha.opts명령 행 인수를 포함 할 수 있는 파일을 읽습니다 . 따라서 다음을 포함하는 파일을 만들 수 있습니다.

--timeout 5000

명령 행에서 Mocha를 실행할 때마다이 파일을 읽고 기본적으로 5 초의 시간 종료를 설정합니다.

상황에 따라 더 좋은 또 다른 방법은 describe테스트 파일의 최상위 호출에서 다음 과 같이 설정하는 것입니다 .

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

이렇게하면 파일 단위로만 시간 초과를 설정할 수 있습니다.

전역 기본값 5000을 원하지만 일부 파일에 대해 다르게 설정하는 경우 두 방법을 모두 사용할 수 있습니다.


일반적으로 전화를 걸 this.timeout거나 화살표가 this설정된 모카 의 다른 멤버에 액세스 하려면 화살표 기능을 사용할 수 없습니다 . 예를 들어, 이것은 일반적으로 작동하지 않습니다 :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

이는 화살표 함수가 this함수가 나타나는 범위에서 가져 오기 때문 입니다. Mocha는 적절한 값으로 함수를 호출 this하지만 해당 값은 화살표 함수 내부로 전달되지 않습니다. Mocha 문서는 이 주제 에 대해 말합니다 .

화살표 기능 ( "람다")을 모카에 전달하는 것은 권장되지 않습니다. 이 어휘 바인딩으로 인해 이러한 함수는 Mocha 컨텍스트에 액세스 할 수 없습니다.


1
정보 주셔서 감사합니다. 그러나 mocha.opts 파일을 수정하려고 시도했지만 영향을 미치지 않습니다.
작품.

2
올바른 장소에서 만들었습니까? Mocha는이 파일을 원하는 위치에 대해 매우 구체적입니다. Mocha를 실행하면 /home/me/src/proj/Mocha는이 파일을 검색합니다./home/me/src/proj/test/mocha.opts
Louis

고마워. 이제 변화가 영향을 미쳤습니다
lm.

this.timeout (10000); // 기본 시간 초과 ^ TypeError : this.timeout은 Suite의 함수가 아닙니다. <anonymous> (/Users/jeff.l/Documents/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Jeff Lowery

6
@JeffLowery 화살표 기능을 사용하고 있습니까? 화살표 함수는 새로운을 설정하지 않으므로 this일반적으로 this.timeout주석에 표시되는 것처럼 실패합니다.
Louis

62

정답에 추가하면 다음과 같이 화살표 기능으로 시간 초과를 설정할 수 있습니다.

it('Some test', () => {

}).timeout(5000)

7
문제는 "모든 테스트에 대해 기본 시간 초과를 전체적으로 변경하는 것"입니다. 답은 하나의 테스트 만 변경합니다. describe('suite', () => {...}).timeout(5000)작동하지 않습니다.
aleung

이전 답변에서와 같이 제안 된 솔루션은 현재 효과가 없습니다. mochajs.org/#timeoutssetTimeout테스트 내에 명시적인 지침 을 삽입 하도록 지시합니다.
Marco Faustinelli

이것은 mocha @ 5와 함께 나를 위해 일했습니다 (특정 테스트를 위해)
Fernando Gabrieli

@MarcoFaustinelli 당신은 문서를 오해하고 있습니다. setTimeouts는 Mocha와 관련이 없습니다. 타임 아웃 설정의 효과를 보여주기 위해 존재합니다.
oligofren

33

완전성을 위해 이것을 추가합니다. package.json파일 에서 스크립트를 사용하는 경우 --timeoutmocha에 옵션을 추가하십시오 .

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

그런 다음 npm run test시간 제한을 10,000 밀리 초로 설정하여 테스트 스위트를 실행 하도록 실행할 수 있습니다 .


관심있는 사람이있는 경우 대부분의 IDE에서는 테스트 실행을위한 모카 옵션을 주입 할 수 있습니다. 예를 들어 WebStorm의 경우 Run-> Edit Configurations-> Extra Mocha Options에서 "--timeout 10000"을 입력 할 수 있습니다.
Rubicon

25

현재 버전의 Mocha에서 시간 초과는 다음과 같이 전역 적으로 변경 될 수 있습니다.

mocha.timeout(5000);

테스트 스위트의 어느 곳이든, 사양의 상단 또는 별도의 테스트 도우미에서 위의 행을 추가하십시오.


이전 버전에서는 브라우저에서만을 사용하여 전역 구성을 변경할 수 있습니다 mocha.setup.

mocha.setup({ timeout: 5000 });

문서 는 글로벌 시간 초과 설정을 다루지 않지만 다른 일반적인 시나리오에서 시간 초과를 변경하는 방법에 대한 몇 가지 예를 제공합니다.


5
이것은 노드에서 작동하지 않습니다. stackoverflow.com/a/47915119/893113을 참조하십시오 . CLI 옵션이 유일한 방법 인 것 같습니다.
paulmelnikow

브라우저에서도 작동하지 않습니다. 오늘 현재 답변에 링크 된 문서에는 timeout매개 변수가 언급되어 있지 않습니다 . 반대로 mochajs.org/#timeoutssetTimeout테스트 내에 명시적인 지침 을 삽입 하도록 지시합니다.
Marco Faustinelli

@MarcoFaustinelli 당신은 문서를 오해하고 있습니다. setTimeouts는 Mocha와 관련이 없습니다. 타임 아웃 설정의 효과를 보여주기 위해 존재합니다.
oligofren
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.