비동기 테스트 및 후크의 경우 "done()"이 호출되었는지 확인하고, 약속을 반환하는 경우 해결되었는지 확인합니다.
저는 테스트할 때 nodejs의 테스트가 있는데, done function의 오류가 선언되지 않았습니다.
오류: 2000ms의 시간 초과입니다.비동기 테스트 및 후크의 경우 "done()"이 호출되었는지 확인하고, 약속을 반환하는 경우 해결되었는지 확인합니다. 코드는,는인입니다.
done();
it('remove existing subdocument', (done) => {
const Vic = new User({
name: 'Vic',
posts: [{ title: 'Leaning Nodejs' }]
});
vic.save()
.then(() => User.findOne({ name: 'Vic' }))
.then((user) => {
const post = user.posts[0];
post.remove();
return user.save();
})
.then(() => User.findOne({ name: 'Vic' }))
.then((user) => {
assert(user.posts.length === 0);
done();
});
});
나는 Mocha의 기본 타임아웃을 2초에서 10초로 증가시키는 것만으로 이것은 플래그를 추가함으로써 할 수 있는 추한 방법을 알고 있습니다.--timeout 10000
트,즉,즉 등의
꾸러미의json
"scripts": {
"start": "SET NODE_ENV=dev && node server.js",
"test": "mocha --timeout 10000"
}
@MPAL의 댓글 링크가 도움이 되었다고 저도 같은 문제에 직면해 있었습니다.나는 그것에 대해 자세히 설명하고 있습니다.
오류/잘못된 주장이 있으면 약속 내부에 오류가 발생합니다.이것은 약속 거부로 이어집니다.한 번 거부하면 호출되지 않으며 mocha는 시간 초과를 보고합니다.다를 쓰면서 이 했습니다..catch
다음 약속과 함께 차단하고 사슬로 묶습니다.
it('resolves', (done) => {
fooAsyncPromise(arg1, arg2).then((res, body) => {
expect(res.statusCode).equal(incorrectValue);
done();
}).catch(done);
});
위에세의 블로그에 언급된 다른 방법은 다음과 같습니다.
쇠사슬로 묶기then(done, done)
그것은 약속의 결의와 거부를 모두 처리합니다.
it('resolves', (done) => {
resolvingPromise.then( (result) => {
expect(result).to.equal('promise resolved');
}).then(done, done);
});
약속을 반환합니다.
it('resolves', () => {
return resolvingPromise.then( (result) => {
expect(result).to.equal('promise resolved');
});
});
비동기/대기 사용:
it('assertion success', async () => {
const result = await resolvingPromise;
expect(result).to.equal('promise resolved');
});
특정 테스트에 시간 초과를 추가하면 기본 시간 초과(2초)를 증가/재지정할 수 있습니다.같은 문제가 있었지만 다음을 사용하여 해결할 수 있었습니다.
it('Test', (done) => {
//your code
done();
}).timeout(10000);
내 문제는 시간 초과 자체였기 때문에(시간 초과를 연장하는 것은 도움이 되지 않았습니다), 그래서 나의 해결책은
it("it should test methods",function(){
this.timeout(0);
});
당신이 보는 것처럼 당신은 필요하지 않습니다.done
위의 내용 중 아무 것도 도움이 되지 않으면 "done"을 제거하고 대신 비동기 함수()를 사용합니다.
it("Test Post Request", async function () {
_code_
})
타임아웃을 늘리자는 것입니다.
다른 방법은 필요한 방법으로만 다음을 수행하는 것입니다.
it('remove existing subdocument', function(done) {
this.timeout(10000);
//your code is here
done();
});
그것은 제가 문제를 해결하는데 도움이 됩니다.
저도 그 오류를 겪고 있었고, 몇 시간 동안 조사하고 디버깅한 끝에 근본 원인을 찾았습니다.
다음 테스트를 고려합니다.
const delay = require('delay')
describe('Test', function() {
it('should resolve', async function(done) {
await delay(1000)
})
})
테스트를 실행하면 다음과 같은 오류가 발생합니다.
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
이제 완료된 인수가 제거되는 약간 다른 검정을 고려해 보겠습니다.
const delay = require('delay')
describe('Test', function() {
it('should resolve', async function() {
await delay(1000)
})
})
이 테스트를 실행하면 합격입니다.
비동기 함수에 done 인수가 있으면 사용되지 않더라도 테스트가 중단되고 done()이 테스트의 마지막에 호출됩니다.
Mocha 버전 7.2.0 사용
package.json
-일 - timeout 15000다를 하여 이 할 수 .
내가 아래에 쓰는 것처럼.
"scripts": {
"start": "node server/server.js",
"test": "export NODE_ENV=test || SET \"NODE_ENV=test\" && mocha --timeout 15000 server/**/*.test.js",
"test-watch": "nodemon --exec 'npm test'"
}
이 오류는 mocha 때문에 발생합니다.
에서 할 수도 .before
아니면beforEach
.
describe('new loading express', function () {
before(function () {
this.timeout(20000); // 20 second timeout for setup
});
});
Node6에서 Node13으로 이전 노드-모듈을 유지보수하고 돌아올 때 함께 하십시오.해결 방법은 간단합니다.
-
mocha.opts
시험지 아래에 있습니다. - 은 입니다
--timeout 10000
에서 이 VS Code 를(를) timeout
모카.src/test/suite/index.ts
, 예를 들어 다음과 같습니다.
// Create the mocha test
const mocha = new Mocha({
ui: 'tdd',
color: true,
timeout: 10000 // Your application ideal timeout here
});
저의 경우는 그것이 사용으로 인한 것입니다.sinon.useFakeTimers()
는 합니다.setTimeout()
내 코드에 사용됩니다.모두 잘 작동하는 것을 제거한 후.
이 줄을 패키지에 추가합니다.json 파일을 사용하여 시간 초과를 늘립니다.
"scripts": { "test": "mocha --timeout 10000" },
저도 같은 오류가 있었는데, 사실 그때 합격하고 전화해서 그런 거예요.따라서 완료된 것을 제거하면 테스트에 통과됩니다.제가 전화를 했는데요.async
@Simon Boudrias here "Error: Resolution method is overspecific"?라는 답변이 효과적이었습니다.나는 단지 그 때를 놓친 것 뿐입니다.await Promise.resolve()
는 처음에했습니다에 했습니다.after(async () => driver && driver.quit());
모든 걸 치우고 제대로 존재했을 겁니다물론 설정하는 것을 잊지 마십시오..timeout(10000);
테스트를 실행하기 위해 기본 2000 이상이 필요한 경우를 대비할 수 있도록 필요한 시간은 무엇이든 상관없습니다.
함께 작업할 수 있습니다.
- 비동기 await,
- 답례 약속 - 그럼,
- 기능을 다한
모든 상황에서 시간 초과가 발생합니다.
아래와 같이 명령 매개 변수로 지정할 수 있는 전역 시간 초과
체인 메서드 또는 매개 변수로 주어진 펑키톤(각각의 [모든] 이전/이후)에 대한 타임아웃
/usr/bin/node./node_modules/mocha/bin/_mocha -uddd --colors/home/cemt/cli-js/test/**/.spec.js
테스트 코드:
describe('NSSF', function () {
var a = 0
beforeAll(async function () {
console.log(">>> 1. a: ", a);
await new Promise((resolve, reject) => {
var intt = setInterval(() => {
console.log(">>> a: ", ++a);
if (a == 10) {
clearInterval(intt)
resolve();
}
}, 800);
});
}, 12000);
it('a should be set to 1', () => {
console.log("-----1");
return new Promise(resolve => {
console.log("-----2");
setTimeout(() => {
resolve(1)
}, 14000)
}).then(a => {
expect(a === 1);
})
}, 3000);
})
시간 초과 설정 안 함:
시간 초과 설정 시:
/usr/bin/node ./node_modules/mocha/bin/_mocha --slow 5000 -u bdd --timeout 10000 --colors /home/cemt/cli-js/test/**/*.spec.js
VS Code에서 Launch.json
모카 공식 페이지(모카 페이지)-> 모카 시작 시 다음 플래그 사용:
--timeout, -t Update in v6.0: --no-timeout은 inspect 플래그를 사용하여 Mocha를 호출할 때 암시됩니다.--timeout 0에 해당합니다. --timeout 999999999는 더 이상 필요하지 않습니다.
테스트 케이스 시간 초과를 지정합니다. 기본값은 2(2)초(2000밀리초)입니다.이 시간보다 오래 걸리는 테스트는 실패한 것으로 표시됩니다.
재정의하려면 시간 제한을 밀리초 단위로 전달하거나, 접미사가 s인 값(예: --timeout 2s 및 --timeout 2000)이 동일합니다.
시간 초과를 사용하지 않으려면 --no-timeout을 사용합니다.
참고: 동기(차단) 테스트도 시간 초과에 의해 구속되지만 코드가 차단을 중지할 때까지 완료되지 않습니다.무한 루프는 여전히 무한 루프일 것입니다!
저도 같은 문제가 있었습니다.저는.before
내 암호대로고치기만 하면 모든 것이this.timeout(0);
의 첫 줄로서.before
기능 및 파일 전체에 비동기 await를 사용하고 제거합니다.done()
.
테스트 시간이 설정한 시간보다 길면 패키지 업데이트라는 오류가 계속 나타납니다.( --no-timeout 속성이 있는 두 번째 테스트를 추가하면 문제가 해결되었습니다.)와 함께 json 파일.
"scripts": {
"test": "cross-env PORT=8000 mocha --watch", "test": "cross-env PORT=8000 mocha --watch --no-timeout"*,
할 필요 done()
됩니다:. mocha timeout .
옵션 1: 입력package.json
가:
"mocha": {
"timeout": "10000"
}
옵션 2: 구성 파일 지정 및 추가timeout
in it in it
, .mocharc.yml
:timeout: '2000' # same as "timeout: '2s'"
예제 참조: https://github.com/mochajs/mocha/blob/master/example/config/ .mocharc.yml
언급URL : https://stackoverflow.com/questions/44149096/for-async-tests-and-hooks-ensure-done-is-called-if-returning-a-promise-en
'programing' 카테고리의 다른 글
UDP 체크섬 계산 (0) | 2023.09.25 |
---|---|
데이터베이스를 DataGrip(0xDBE)으로 가져옵니다. (0) | 2023.09.25 |
모든 외부 키 및 제약 조건을 무시하는 SQL 행 삭제 (0) | 2023.09.25 |
안드로이드 토스트가 토스트보다 더 길 수 있습니까?LEGTH_LONG? (0) | 2023.09.25 |
Mysql: 루틴 오류로 인해 사용자 ''@'localhost''에 대해 명령 실행이 거부되었습니다. (0) | 2023.09.25 |