최근에 진행중인 프로젝트에서 새로 도입해서 사용해 보는 것 중 axios-mock-adapter 라는 라이브러리가 있다. api의 임시 응답값을 개발시에 사용할 수 있도록 도와주는 라이브러리이다.
라이브러리 설치
npm i axios
npm i axios-mock-adapter --save-dev
mocking 모드 script 추가
mocking 용 npm script를 추가한다.
mocking data를 사용하고 싶을때는 해당 script를 사용하고, 일반 개발 환경에서는 api 통신을 사용하기 위해 mode를 분리했다.
// package.json
{
// ...
"scripts" : {
"start:mock" : "vite --mode mock
}
}
// src/api/insatnce.ts
export const baseURL = import.meta.env.VITE_MOCKING_USE == true ? "" : apiServerUrl
const instance = axios.create({
baseURL,
})
// src/api/mock/index.ts
import {instance} from "../instance.ts";
export const mock = import.meta.env.VITE_MOCKING_USE == true ? new AxiosMockAdapter(instance)
// src/api/users.ts
export function getUsers(){
const {data} =
await instance.get<AxiosResponse<{id: number; name: string}[]>>(
"/api/users",
)
return data
}
// src/api/mock/users.mock.ts
import {mock} from "."
if (mock) {
mock.onGet("/api/users").reply(200, {
data: [
{id: 1, name: "Test User1"},
{id: 2, name: "Test User2"},
],
});
}
에러 상황을 재현할 때 데이터를 살짝만 바꿔서 바로 확인해 볼 수 있어서 정말 간편하다.
컴포넌트 내부적으로 api 처리 로직을 가지고 있는 경우도 문제 없이 story로 표현할 수 있어서 정말 좋다.
수정, 삭제와 같은 mutation 동작들을 mocking은 mocking 데이터를 어느정도 구조화 해야된다.
api 하나 수정할때 mocking 데이터까지 같이 고쳐야해서 살짝 번거롭다.
사실 단점이라고 적긴 했지만 저런 단점을 커버할 수 있을 정도로 장점이 더 크기 때문에, 개인적으로는 안 쓸 이유가 없는 라이브러리 2순위가 되었다. storybook을 쓴다면 더더욱 써야하는 라이브러리라고 생각한다.
오오 axios 에서 만든 라이브러리인가요?
신기하네요 그리고 정말 편할 것 같습니다!
의외로 자주 겪게되는 불편함을
굳이 api를 만들어주는 외부 서버 없이도
이렇게 간단하게 재현하고 테스트 할 수 있다니 흐음~
이건 안써볼 수가 없겠네욬ㅋ
정말 좋은거 알고 갑니다! ㅎ