Jest로 테스트시 input이 undefined라면서 테스트 통과가 되지 않는 에러
발생 에러
Jest
를 사용해 테스트를 진행할 때 NO INPUT 에러가 발생하면서 테스트가 통과 되지 않았다.
const mockQuestions = (inputs) => {
const messages = [];
MissionUtils.Console.readLineAsync = jest.fn((prompt) => {
messages.push(prompt);
const input = inputs.shift();
if (input === undefined) {
throw new Error("NO INPUT");
}
return Promise.resolve(input);
});
MissionUtils.Console.readLineAsync.messages = messages;
};
test("파일에 있는 상품 목록 출력", async () => {
await run({
inputs: ["[콜라-1]", "N", "N"],
expected: [
...
],
});
});
---
NO INPUT
if (input === undefined) {
throw new Error("NO INPUT");
^
}
return Promise.resolve(input);
이유
테스트 코드는 [콜라-1] / N / N
이렇게 3번을 입력하는 코드인데,
테스트 대상 코드는 입력이 4번되기를 기대하는 코드였기 때문이다.
입력값 입력이 4번 이루어져야 하는데 테스트 입력값으로는 3번만 입력이 이루어지기 때문에 이미 비어있는 inputs를 shift하면 제거된 배열 요소가 없어서 undefined
가 되어 에러가 발생하는 것이었다.
해결 방법
다양한 상황에서 테스트 코드와 테스트 대상 코드의 입력 요청이 동일한 횟수로 이루어질 수 있도록 수정한다.
Leave a comment