документация жрать 6 дает простой способ поиздеваться HTTP называет так, что каждый запрос возвращает конкретный ответ: http://docs.guzzlephp.org/en/latest/testing.html#mock-handlerКак издеваться над определенными URL-адресами с помощью Guzzle?
Однако, как указано в документации, то MockHandler
определяет очередность ответов, которые будут отправлены на каждый запрос, независимо от URL-адреса, в том же порядке.
Как сообщить Guzzle отправить конкретный ответ для заданного URL-адреса каждый раз, когда он вызывается?
Например, я хочу этот вызов:
$client->request('GET', '/products')->getBody();
не сделать фактический запрос, но всегда возвращаться:
{'products' => [{id: 1, name: 'Product 1'}, {id: 2, name: 'Product 2'}]
Doing его с AngularJS $httpBackend
обслуживание будет легко:
$httpBackend
.when('GET', '/products')
.respond("{id: 1, name: 'Product 1'}, {id: 2, name: 'Product 2'}")
Любая идея о том, как достичь этого с помощью Guzzle 6?
Можете ли вы предоставить некоторый контекст, касающийся тестовой установки или приложения в целом? Я пытаюсь понять, почему вам нужно сделать более одного вызова для любого конкретного URL-адреса, особенно если вы просто хотите вернуть идентичные ответы. –
@ShaunBramley Я делаю функциональные тесты с Behat и Mink. Поэтому я загружаю страницу своего сайта в тест (например, «Учитывая, что я нахожусь в каталоге/каталог»), которая представляет собой страницу, которая вызывает несколько вызовов внешнего API (вызов для получения продуктов и вызов для получения последних новостей, например) с Guzzle, и мне не нужно знать порядок звонков. И мне не хотелось бы, чтобы мой тест зависел от внешнего API во время моих тестов (который может быть медленным, медленным или каким-либо другим), поскольку это страница, которую я хочу протестировать (она должна отображать продукты/новости из API), а не сам API. Это контекст! –
Я ищу то же самое решение. Я нашел эту библиотеку: https://github.com/eschwartz/GuzzleHttpMock (он в настоящее время поддерживает wzzle 5, интересно, поддерживает ли он 6 ветвей) –