Jest 4 Mock Fn
Jest 4 - mock function
Jest์์ ๊ฐ์ฅ ์ ์ฉํ ํจ์๋ผ๊ณ ์๊ฐํฉ๋๋ค. snapshot์์ ์ง์ ์ ์ผ๋ก ๋ฐ๋๋ ๊ฐ์ ๊ณ ์ ์ํฌ์๋ ์๊ณ ๊ฐ์ ํจ์๋ก ๋ง๋ค์ด db๋ฅผ ํ ์คํธํ๊ฑฐ๋ ํ์ํ ๊ฐ์ ์ง์ ํ ์ ์์ด์, ํ ์คํธํ๋ฉด์ ๋ถํ์ํ ์๊ฐ์ ์๋์ ์์ต๋๋ค.
Mock
fn()
์ง์ ํจ์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํจ
const test = jest.fn(() => '์ด ํจ์๋ ํด๋น ์คํธ๋ง์ return ํฉ๋๋ค.')
test('return test', () => {
expect(test).toReturn("์ด ํจ์๋ ํด๋น ์คํธ๋ง์ return ํฉ๋๋ค.")
test.mockImplementation(() => '์ด๋ ๊ฒ mockImplementation๋ฅผ ์ด์ฉํด ์์ ๋ ๊ฐ๋ฅ')
expect(test).toReturn("์ด๋ ๊ฒ mockImplementation๋ฅผ ์ด์ฉํด ์์ ๋ ๊ฐ๋ฅ")
test.mockImplementationOnce(() => '์ด๋ ๊ฒ js์ yield์ฒ๋ผ')
.mockImplementationOnce(() => 'ํ๋ฒ ํธ์ถ ํ ๋ ๋ง๋ค')
.mockImplementationOnce(() => '๋ค์ ๋ค์์ผ๋ก ๋๊ธฐ๊ฒ ํ ์๋ ์๋ค.')
test.mockReturnValue('์ด๋ ๊ฒ ์ง์ ํด๋ ๋ชจ๋ ๋์ผํ ๊ฐ์ด๋ค')
// 1,2,3 ํธ์ถํ ๋๋งค๋ค ์คํ ๋๋ค๊ฐ ๋ง์ง๋ง ๊ฐ์ด ์ ์ฅ๋จ
})
mock()
๋ชจ๋์ ์๋ ๋ชจ๋ ํจ์๋ฅผ mockํจ์๋ก ๋ง๋ค์ด์ค
// users.js
// class Users {
// static all() {
// return axios.get('/users.json').then(resp => resp.data);
// }
// }
// export default Users;
import axios from 'axios';
import Users from './users';
jest.mock('axios');
test('return test', () => {
// resolve์ ํด๋น ๊ฐ์ผ๋ก ์ค์
const resp = { data: users };
axios.get.mockResolvedValue(resp);
// users.js์ ์๋ ํจ์ all์์ ์คํ ์ค์ธ axios์ ํจ์๋ฅผ ์ง์ ์ง์ ํด์ ๊ฒ์ฌ
// axios.get์ ์คํํ์ง ์์๋ ๋ผ์ server๋ฅผ ๋ถ์ฌ์ ์ผ์ผํ ํ
์คํธ ํ์ง ์์๋ ๋จ
return Users.all().then(data => expect(data).toEqual(users));
})
mock prop
const mockFn = jest.fn()
// ํธ์ถ ์ ์ ๋ฌ๋ ์ธ์ ๊ฐ
mockFn.mock.calls()
// ํธ์ถ์ ๋ฐํ๊ฐ, throw ์ค๋ฅ
mockFn.mock.results()
// mockํจ์์ instance ๊ฐ
mockFn.mock.instance()
// ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํน์ ๊ฐ์ผ๋ก ๋ฐํ๋๋๋ก ์ค์
mockFn.mockReturnValue(value)
// promise resolve๊ฐ์ ์ค์
mockFn.mockResolvedValue(value)
// promise reject๊ฐ์ ์ค์
mockFn.mockRejectedValue(error)
// mockํจ์ ์ด๊ธฐํ
mockFn.mockImplementation(fn)
// mockํจ์ ์ด๊ธฐํ(ํธ์ถ ํ ๋ ๋ง๋ค ๋ค๋ฅธ ๊ฐ์ด ๋์ค๊ฒ ์ฒด์ด๋์ ํ ์ ์์ yield์ ๋น์ท)
mockFn.mockImplementationOnce(fn)
// ํธ์ถ ๊ธฐ๋ก์ ์ด๊ธฐํ
mockFn.mockClear()
// ํธ์ถ ๊ธฐ๋ก,mock ๊ตฌํ์ ์ด๊ธฐํ
mockFn.mockReset()
// mock ์ด๊ธฐ๊ฐ์ผ๋ก ๋ณต์ (์ฃผ๋ก jest.spyOn์ผ๋ก ์์ฑ๋ mock ํจ์์์ ์ฌ์ฉ)
mockFn.mockRestore()
spyOn
๊ธฐ์กด mockํจ์๋ mockํจ์๋ก test๋ฅผ ์ํด ๋ง๋ค์ด ๋ณํ๋์ด ์ค์ ํจ์๊ฐ ์๋ mockํจ์๋ก ๊ฒ์ฌ๋ฅผ ํ๋ค, ์ค์ ํจ์๋ฅผ ์์ ์์ด ํ ์คํธ ํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋๊ฒ spyOn์ด๋ค.
const video = {
play() {
return true;
},
};
// spy์์ด ์ง์ ํจ์๋ฅผ ํธ์ถํ๋ฉด Matcher error: received value must be a mock or spy function ์๋ฌ๊ฐ ๋์จ๋ค
expect(video.play).toHaveBeenCalled();
expect(video.play()).toBe(true);
const spy = jest.spyOn(video, 'play');
const isPlaying = video.play();
expect(spy).toHaveBeenCalled();
expect(isPlaying).toBe(true);
spy.mockRestore(); // ์คํ์ด๋ฅผ ์ ๊ฑฐํ๊ณ ์๋ ๋ฉ์๋๋ก ๋ณต์