Mic*_*rin 5 php unit-testing mocking guzzle guzzle6
Guzzle 6文档提供了一种模拟HTTP调用的简便方法,以便每个请求都返回特定的响应:http : //docs.guzzlephp.org/en/latest/testing.html#mock-handler
但是,正如文档中所述,MockHandler定义了将按相同顺序针对每个请求(无论URL)发送的响应队列。
如何让Guzzle在每次调用时都针对给定的URL发送特定的响应?
例如,我要这个电话:
$client->request('GET', '/products')->getBody();
Run Code Online (Sandbox Code Playgroud)
不提出实际要求,而是始终返回:
{'products' => [{id: 1, name: 'Product 1'}, {id: 2, name: 'Product 2'}]
Run Code Online (Sandbox Code Playgroud)
使用AngularJS $httpBackend服务很容易:
$httpBackend
.when('GET', '/products')
.respond("{id: 1, name: 'Product 1'}, {id: 2, name: 'Product 2'}")
Run Code Online (Sandbox Code Playgroud)
关于如何使用Guzzle 6做到这一点的任何想法?
如果您使用 Behat 和 Mink 进行验收测试,最好的选择是不要接触应用程序代码本身,而是模拟(存根)应用程序外部的外部资源。例如,如果您想为您的应用程序模拟 Twitter,最好创建一个单独的 Web 应用程序(内部带有模拟(存根))并将其 URL 传递给您的应用程序 ( SUT )。
看一下PHPUnit 的 HTTP Mock:它正是这样做的,但目前仅适用于 PHPUnit。API 与 AngularJS 非常相似:
$this->http->mock
->when()
->methodIs('GET')
->pathIs('/foo')
->then()
->body('mocked body')
->end();
$this->http->setUp();
Run Code Online (Sandbox Code Playgroud)