Axios Mocking에 관한 질문입니다.
332
7 câu hỏi đã được viết
// Axios.test.ts
import axios from 'axios';
import ManagerService from "./ManagerService";
jest.mock('axios');
const mockedAxios = axios as jest.Mocked<typeof axios>;
describe("Axios Test", () => {
let managerService = new ManagerService();
it("should mock axios get call", async () => {
mockedAxios.get.mockResolvedValue({
data: [
{
corporation: "inflearn"
}
],
});
const test = await managerService.axiosTest("inflearn");
expect(test).toEqual([
{
corporation: "inflearn"
}
]);
expect(mockedAxios.get).toHaveBeenCalledWith(`${process.env.SERVER_URL}/corporation/info`, {
params: { corporation: "inflearn" },
});
});
});
위와 똑같은 코드로 테스트를 진행했고, 본 코드에서는 약간의 차이만 있었습니다.
하지만 아직 왜 그렇게 되는지 알지 못하여서 강사님께 여쭤보려고 합니다.
1번 코드 ( 테스트가 잘 동작하는 코드 )
axiosTest = async (corporation: string) => {
const response = await axios.get(`${process.env.SERVER_URL}/corporation/info`, {
params: {
corporation: corporation,
},
});
if (!response) {
throw new Error("값이 없음");
}
return response.data;
};
2번 코드 ( 값이 없음으로 에러가 발생하는 코드 )
axiosTest = async (corporation : string) => {
const site = await axios({
method: 'get',
url: `${process.env.SERVER_URL}/corporation/info`,
params: {
corporation : corporation
},
})
if(!site) {
throw new Error("값이 없음");
}
return site.data
}
둘의 차이점에 대해서 알 수 있을까요?
Câu trả lời 1
0
안녕하세요, 인프런 AI 인턴입니다.
1번 코드와 2번 코드의 차이점에 대해서 설명드리겠습니다.
기본적으로 1번 코드와 2번 코드 모두 axios를 활용하여 HTTP GET 요청을 보내고 있습니다. 차이점은 요청을 보내는 방식에 있습니다.
1번 코드에서는 axios.get 메소드를 직접 사용하여 요청을 보냅니다. 이 방식은 HTTP GET 요청을 보낼 때 사용하기 편리한 단축 메소드입니다. URL과 파라미터만 지정해주면 axios가 내부적으로 이를 처리해 요청을 보내줍니다.
const response = await axios.get(`${process.env.SERVER_URL}/corporation/info`, {
params: {
corporation: corporation,
},
});
반면, 2번 코드에서는 axios 함수에 요청 옵션 객체를 직접 전달하는 방식을 사용합니다. 이 방식에서는 메소드와 URL, 파라미터 등을 요청 옵션 객체 안에 지정해주어야 합니다. 이 방식은 좀 더 다양한 HTTP 메소드(GET, POST 등)에 대한 요청을 유연하게 처리할 수 있는 장점이 있습니다.
const site = await axios({
method: 'get',
url: `${process.env.SERVER_URL}/corporation/info`,
params: {
corporation: corporation,
},
});
두 방식 모두 유효한 axios 사용법이지만, “값이 없음으로 에러가 발생하는 코드”라고 하신 2번 코드에서 실제로 axios 요청이 실패했거나 의도하지 않은 동작이 발생했을 가능성은 낮아 보입니다. axios 요청은 Promise를 반환하며, 이 Promise가 reject되지 않는 한(즉, 네트워크 오류 등으로 요청 자체가 실패하지 않는 한) site 변수에는 항상 요청의 결과가 담길 것입니다.
문제가 발생한 정확한 원인을 파악하기 위해서는 추가적인 디버깅이 필요합니다. 예를 들어, axios의 반환 값이 예상과 다른 형태로 오거나, 응답 자체는 성공적으로 받았으나 예상했던 데이터 형식이 아닌 경우 등 여러 상황을 검토해볼 필요가 있습니다.
트리거 질문
0
10
1
3강 질문
0
18
1
2강 nodejs 3단계 설명 질문
0
34
1
useEffect와 lifecycle문의
0
27
2
프론트엔드 학습 수준 문의
0
39
2
리액트 챕터별 코드에서 eslint 설정파일이 없어요
0
48
2
fetchBoardsOfMine, fetchBoardsCountOfMine 에러 문의드립니다
0
36
1
nodemon -exce 관련 오류가 나오실 때
0
151
1
swagger /user/detail/:id 조회시 id로 조회 안됩니다.
0
192
1
Express 사용하면서 Jest 테스트 관련해서 질문 드립니다.
0
294
1
윈도우는 터미널을 뭘 써야하나요?
0
245
1
해당 강의 깃허브 주소나
0
305
1
pm2 start ecosystem.config.js로 실행했는데 require로 작성하는 것에 에러가 뜹니다.
0
999
1
포매팅
0
278
1
프리즈마 git repository 질문
0
299
1
Swagger 설정 문의
0
327
1
섹션 0에 디스코드 주소가 어디에 있나요?
0
426
1
prisma에서 (비)식별관계 설계
0
335
1
유효성 검사
0
394
1
prisma schema에서
0
813
1
AWS RDS 세팅 중에 오류가 나요...
0
499
1
디스코드 채널
0
587
1
github 권한
0
767
1
swagger No operations defined in spec
0
3071
1

