반응형
joke console.log 테스트 방법
create-react-app을 사용하고 있으며, 이 앱의 출력을 체크하는 재스트 테스트를 작성하려고 합니다.console.log
.
테스트할 기능은 다음과 같습니다.
export const log = logMsg => console.log(logMsg);
내 테스트는:
it('console.log the text "hello"', () => {
console.log = jest.fn('hello');
expect(logMsg).toBe('hello');
});
여기 제 실수가 있습니다.
FAIL src/utils/general.test.js
● console.log the text hello
expect(received).toBe(expected) Expected value to be (using ===): "hello"
Received:
undefined
Difference:
Comparing two different types of values. Expected string but received undefined.
그것을 확인하고 싶다면console.log
올바른 파라미터(전달한 파라미터)를 받았습니다.mock
고객님의jest.fn()
.
또, 유저에 대해서,log
기능, 그렇지 않은 경우console.log
는 호출되지 않습니다.
it('console.log the text "hello"', () => {
console.log = jest.fn();
log('hello');
// The first argument of the first call to the function was 'hello'
expect(console.log.mock.calls[0][0]).toBe('hello');
});
또는
it('console.log the text "hello"', () => {
console.log = jest.fn();
log('hello');
// The first argument of the first call to the function was 'hello'
expect(console.log).toHaveBeenCalledWith('hello');
});
이 접근방식을 도입할 경우, 잊지 말고 이 접근방식의 원래 가치를 회복하십시오.console.log
.
또 다른 옵션은jest.spyOn
(교환의 필요성)console.log
프록시가 생성됩니다).
it('console.log the text "hello"', () => {
const logSpy = jest.spyOn(console, 'log');
console.log('hello');
expect(logSpy).toHaveBeenCalledWith('hello');
});
자세한 것은 이쪽.
또는 다음과 같이 할 수 있습니다.
it('calls console.log with "hello"', () => {
const consoleSpy = jest.spyOn(console, 'log');
console.log('hello');
expect(consoleSpy).toHaveBeenCalledWith('hello');
});
다른 옵션은 원래 로그에 대한 참조를 저장하고 각 테스트에 대한 농담 모의로 대체한 후 모든 테스트가 완료된 후 복원하는 것입니다.이렇게 하면 테스트 출력을 오염시키지 않고 원래 로그 방식을 사용하여 디버깅할 수 있다는 약간의 이점이 있습니다.
describe("Some behavior that will log", () => {
const log = console.log; // save original console.log function
beforeEach(() => {
console.log = jest.fn(); // create a new mock function for each test
});
afterAll(() => {
console.log = log; // restore original console.log after all tests
});
test("no log", () => {
// TODO: test something that should not log
expect(console.log).not.toHaveBeenCalled();
});
test("some log", () => {
// TODO: execute something that should log
expect(console.log).toHaveBeenCalledWith(
expect.stringContaining("something")
);
const message = console.log.mock.calls[0][0]; // get actual log message
log(message); // actually log out what the mock was called with
});
});
HaveBeenCalledWith 또는 농담으로 제공되는 모의 콜 체크 방법(toHaveBeenCalled로 시작하는 방법)을 검토합니다.
it('console.log the text "hello"', () => {
console.log = jest.fn();
log('hello');
expect(console.log).toHaveBeenCalledWith('hello');
});
언급URL : https://stackoverflow.com/questions/49096093/how-do-i-test-a-jest-console-log
반응형
'programing' 카테고리의 다른 글
useMemo vs. useEffect + useState (0) | 2023.03.05 |
---|---|
Jeest expect.any()가 예상대로 작동하지 않습니다. (0) | 2023.03.05 |
리액트 라우터의 루트에 대한 접근을 제한하는 방법 (0) | 2023.02.23 |
PHP의 JSON POST에서 HTTP 요청 본문을 읽는 동안 문제가 발생했습니다. (0) | 2023.02.23 |
react-testing-library 사용 시 "myText" 오류가 있는 요소를 찾을 수 없습니다. (0) | 2023.02.23 |