@@ -140,6 +140,89 @@ Or set a default exception::
140
140
}
141
141
}
142
142
143
+ Mocking request-dependent responses
144
+ -----------------------------------
145
+
146
+ You can mock responses and exceptions which are only used in certain requests
147
+ or act differently depending on the request.
148
+
149
+ To conditionally return a response when a request is matched::
150
+
151
+ use Http\Mock\Client;
152
+ use Psr\Http\Message\ResponseInterface;
153
+
154
+ class YourTest extends \PHPUnit_Framework_TestCase
155
+ {
156
+ /**
157
+ * @expectedException \Exception
158
+ */
159
+ public function testClientThrowsException()
160
+ {
161
+ $client = new Client();
162
+
163
+ // $requestMatcher is an instance of Http\Message\RequestMatcher
164
+
165
+ $response = $this->createMock(ResponseInterface:class);
166
+ $client->on($requestMatcher, $response);
167
+
168
+ // $request is an instance of Psr\Http\Message\RequestInterface
169
+ $returnedResponse = $client->sendRequest($request);
170
+ }
171
+ }
172
+
173
+ Or for an exception::
174
+
175
+ use Http\Mock\Client;
176
+ use Exception;
177
+
178
+ class YourTest extends \PHPUnit_Framework_TestCase
179
+ {
180
+ public function testClientThrowsException()
181
+ {
182
+ $client = new Client();
183
+
184
+ // $requestMatcher is an instance of Http\Message\RequestMatcher
185
+
186
+ $exception = new \Exception('Whoops!');
187
+ $client->on($requestMatcher, $exception);
188
+
189
+ // $request is an instance of Psr\Http\Message\RequestInterface
190
+
191
+ $this->expectException(\Exception::class);
192
+ $returnedResponse = $client->sendRequest($request);
193
+ }
194
+ }
195
+
196
+ Or pass a callable, and return a response or exception based on the request::
197
+
198
+ use Http\Mock\Client;
199
+ use Psr\Http\Message\RequestInterface;
200
+
201
+ class YourTest extends \PHPUnit_Framework_TestCase
202
+ {
203
+ /**
204
+ * @expectedException \Exception
205
+ */
206
+ public function testClientThrowsException()
207
+ {
208
+ $client = new Client();
209
+
210
+ // $requestMatcher is an instance of Http\Message\RequestMatcher
211
+
212
+ $client->on($requestMatcher, function (RequestInterface $request) {
213
+
214
+ // return a response
215
+ return $this->createMock('Psr\Http\Message\ResponseInterface');
216
+
217
+ // or an exception
218
+ return new \Exception('Whoops!');
219
+ });
220
+
221
+ // $request is an instance of Psr\Http\Message\RequestInterface
222
+ $returnedResponse = $client->sendRequest($request);
223
+ }
224
+ }
225
+
143
226
144
227
.. hint ::
145
228
0 commit comments