인턴을 통해 테스트해야하는 비동기 함수가 있습니다. 각각은 ES6 약속을 사용합니다.인턴 : ES6 약속으로 비동기 단위 테스트 테스트
Intern 문서에서 약속을 확인하는 즉시 약속을 반환하는 테스트 함수가 전달된다고 말합니다. 그러나 테스트중인 비동기 함수가 해결되었는지/거부되었는지 여부뿐만 아니라 해결 된 값이 올바른지 확인하고 싶습니다.
예 : 내 기능을 가지고 : 다음
function getSomething() {
return new Promise((resolve, reject) => {
// do some async stuff and resolve when done
setTimeout(function() {
resolve('the value');
}, 1000);
});
}
나는 시험 방법이 :이 작동하지 않습니다 나타났습니다
tdd.test('getSomething', function() {
return new Promise((resolve, reject) => {
getSomething().then(function(value) {
// I want to resolve/reject the promise BASED ON the assertion -- if the assertion fails, I want to reject the promise; if it succeeds, I want to resolve it
assert.equal(value, 'the value', 'getSomething should return "the value".');
resolve();
});
});
}
를 - 주장은 내 테스트에 실패하는 경우 , resolve()는 결코 호출되지 않습니다.
어설 션을 조건으로 한 약속을 어떻게 해결할 수 있습니까? 시도/catch에서 어설 션을 래핑해야합니까? 나는 이것에 관한 인턴 문서에 대한 어떠한 문서도 보지 못했고 (대부분은 ES6 약속 대신 this.async()를 사용했다).
그래서 테스트는 단지'''getSomething.then (function() {assert ('whatever')}))'''일까요? 이 경우 약속은 이미 그 시점에서 해결 되었기 때문에 주장이 호출 될 것인가? – Skitterm
예 ('getSomething(). then' - 괄호를 잊지 마세요). assert는'getSomething()'약속이 해결 된 후에 호출됩니다. 왜냐하면 당신이 반환하는 것은 실제로 약속 체인이기 때문에,'then' 콜백 (그리고 따라서 어설 션)이 실행될 때까지 체인은 해결되지 않기 때문입니다. ('getSomething' 약속이 거부된다면 거부 할 수도 있지만 괜찮습니다.) – jason0x43