Axios
구 코드베이스의 REST API에서 우리는 Axios를 사용하여 서버와 통신했지만, 새로운 애플리케이션에서는 Axios를 사용해서는 안 됩니다. 대신 apollo-client
에 의존하여 GraphQL API를 쿼리하세요. 더 많은 세부사항은 우리의 GraphQL 문서를 참조하세요.
모든 기본값이 설정되도록 보장하기 위해 axios_utils
에서 Axios를 가져와야 합니다. Axios를 직접 사용하지 마세요.
CSRF 토큰
우리의 모든 요청에는 CSRF 토큰이 필요합니다.
이 토큰이 설정되도록 보장하기 위해 Axios를 가져오고, 토큰을 설정한 다음 axios
를 내보냅니다.
이 내보낸 모듈은 토큰이 설정되도록 Axios를 직접 사용하는 대신 사용해야 합니다.
사용법
import axios from './lib/utils/axios_utils';
axios.get(url)
.then((response) => {
// `data`는 서버에서 제공한 응답입니다
const data = response.data;
// `headers`는 서버가 응답한 헤더입니다
// 모든 헤더 이름은 소문자로 변환됩니다
const paginationData = response.headers;
})
.catch(() => {
// 오류 처리
});
테스트에서 Mock Axios 응답
응답을 모킹하는 데 도움을 주기 위해 우리는 axios-mock-adapter를 사용하고 있습니다.
spyOn()
보다 장점:
- 응답 객체를 생성할 필요가 없습니다
- 통과 호출을 허용하지 않습니다 (우리가 피하고자 하는)
- 오류 케이스를 테스트하기 위한 명확한 API를 제공합니다
- 서로 다른 응답을 허용하기 위해
replyOnce()
를 제공합니다
우리는 모킹에 적합하지 않기 때문에 Axios 인터셉터 사용을 반대하기로 결정했습니다.
예시
import axios from '~/lib/utils/axios_utils';
import MockAdapter from 'axios-mock-adapter';
let mock;
beforeEach(() => {
// 이 부분은 기본 인스턴스에 모킹 어댑터를 설정합니다
mock = new MockAdapter(axios);
// /users에 대한 모든 GET 요청 모킹
// reply의 인자는 (상태, 데이터, 헤더)입니다
mock.onGet('/users').reply(200, {
users: [
{ id: 1, name: 'John Smith' }
]
});
});
afterEach(() => {
mock.restore();
});
Axios로 테스트에서 Poll 요청 모킹
폴링 함수는 헤더 객체가 필요하므로 항상 세 번째 인자로 객체를 포함해야 합니다:
mock.onGet('/users').reply(200, { foo: 'bar' }, {});