시간 초과를 늘리는 "솔루션"이 실제로 진행중인 작업을 모호하게합니다.
- 코드 및 / 또는 네트워크 호출 속도가 너무 느립니다 (사용자 경험을 좋게하려면 100ms 미만이어야 함)
- 단언 (테스트)이 실패하고 Mocha가 조치를 취하기 전에 오류가 발생했습니다.
일반적으로 Mocha가 콜백에서 어설 션 오류를받지 못하면 # 2가 발생합니다. 이것은 다른 코드가 스택을 더 이상 예외를 삼키기 때문에 발생합니다. 이를 처리하는 올바른 방법은 코드를 수정하고 오류를 삼키지 않는 것 입니다.
외부 코드가 오류를 삼킬 때
수정할 수없는 라이브러리 함수 인 경우 어설 션 오류를 잡아서 Mocha에 직접 전달해야합니다. 어설 션 콜백을 try / catch 블록에 래핑하고 예외를 done 처리기에 전달하면됩니다.
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(function (err, result) {
try { // boilerplate to be able to get the assert failures
assert.ok(true);
assert.equal(result, 'bar');
done();
} catch (error) {
done(error);
}
});
});
이 상용구는 물론 테스트를 좀 더 즐겁게 해줄 몇 가지 유틸리티 기능으로 추출 할 수 있습니다.
it('should not fail', function (done) { // Pass reference here!
i_swallow_errors(handleError(done, function (err, result) {
assert.equal(result, 'bar');
}));
});
// reusable boilerplate to be able to get the assert failures
function handleError(done, fn) {
try {
fn();
done();
} catch (error) {
done(error);
}
}
네트워크 테스트 속도 향상
그 외에는 작동하는 네트워크에 의존하지 않고 테스트를 통과하기 위해 네트워크 호출에 테스트 스텁을 사용하기 시작하는 것에 대한 조언을 얻는 것이 좋습니다. Mocha, Chai 및 Sinon을 사용하면 테스트가 다음과 같이 보일 수 있습니다.
describe('api tests normally involving network calls', function() {
beforeEach: function () {
this.xhr = sinon.useFakeXMLHttpRequest();
var requests = this.requests = [];
this.xhr.onCreate = function (xhr) {
requests.push(xhr);
};
},
afterEach: function () {
this.xhr.restore();
}
it("should fetch comments from server", function () {
var callback = sinon.spy();
myLib.getCommentsFor("/some/article", callback);
assertEquals(1, this.requests.length);
this.requests[0].respond(200, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]');
expect(callback.calledWith([{ id: 12, comment: "Hey there" }])).to.be.true;
});
});
자세한 내용은 Sinon의 nise
문서 를 참조하십시오.