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
를 사용해야 했다는 것입니다.
종속성 주입에 따라 모의 응답
으아악bind
或singleton
化您的InternalService
을 반환하는 사용자 정의 Guzzle http 클라이언트를 사용하려고 합니다. 예를 들면 다음과 같습니다.참조: PPUnit을 사용하여 Laravel 컨트롤러 내에서 단위 테스트