Laravel 기능 테스트에서 GuzzleHttp 클라이언트를 사용하여 타사 API에 대한 요청을 시뮬레이션하는 방법은 무엇입니까?
P粉842215006
P粉842215006 2023-11-09 11:42:58
0
1
646

Laravel 프로젝트(PHP 8.0의 Laravel 8)에는 내부 끝점을 테스트하는 기능 테스트가 있습니다. 엔드포인트에는 서비스의 메서드를 호출하는 컨트롤러가 있습니다. 그런 다음 서비스는 타사 끝점 호출을 시도합니다. 제가 시뮬레이션하고 싶은 것은 바로 이 제3자 엔드포인트입니다. 현재 상황은 다음과 같습니다.

내부 엔드포인트 기능 테스트

으아아아

내부 엔드포인트 컨트롤러

으아아아

사내 서비스

으아아아

Guzzle의 문서를 살펴봤지만 MockHandler이 전략에서는 테스트에서 http 요청을 수행해야 하는데, 이는 제가 테스트에서 원하는 것이 아닙니다. Guzzle의 http 클라이언트를 모의하고 테스트에서 지정할 수 있는 사용자 정의 http 응답을 반환하고 싶습니다. 나는 다음과 같이 Guzzle의 http 클라이언트를 에뮬레이트하려고 합니다:

으아아아

그런데 InternalService 이번 시뮬레이션은 테스트에서는 안 맞는 것 같습니다.

저도 Http Fake를 고민해보고 사용해봤지만 잘 안됐고, Guzzle의 http 클라이언트가 Laravel의 http 클라이언트를 확장하지 않는 것 같아요.

이 문제를 해결하고 타사 엔드포인트를 모의하는 가장 좋은 방법은 무엇입니까?

편집

이 StackOverflow 질문에서 영감을 받아 Guzzle 클라이언트에 모의 응답을 내 서비스에 삽입하여 이 문제를 성공적으로 해결했습니다. 위 StackOverflow 질문과의 차이점은 DI 구성이 다르기 때문에 $this->app->singleton 而不是 $this->app->bind를 사용해야 했다는 것입니다.

AppServiceProvider.php

으아아아


P粉842215006
P粉842215006

모든 응답(1)
P粉617597173

종속성 주입에 따라 모의 응답 bindsingleton 化您的 InternalService을 반환하는 사용자 정의 Guzzle http 클라이언트를 사용하려고 합니다. 예를 들면 다음과 같습니다.

으아악

참조: PPUnit을 사용하여 Laravel 컨트롤러 내에서 단위 테스트

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿