Skip to content

Commit 49dc8db

Browse files
Sam RapaportNyholm
Sam Rapaport
authored andcommitted
Add documentation for the MockClientStrategy (#173)
* Add documentation for the MockClientStrategy See [#90](php-http/discovery#90). * Update discovery.rst * Break lines at 80 characters.
1 parent 083ccf6 commit 49dc8db

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

discovery.rst

+49
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Currently available discovery services:
1313
- PSR-7 Message Factory Discovery
1414
- PSR-7 URI Factory Discovery
1515
- PSR-7 Stream Factory Discovery
16+
- Mock Client Discovery (not enabled by default)
1617

1718
The principle is always the same: you call the static ``find`` method on the discovery service if no explicit
1819
implementation was specified. The discovery service will try to locate a suitable implementation.
@@ -233,6 +234,54 @@ This type of discovery finds a URI factory for a PSR-7_ URI implementation::
233234
}
234235
}
235236

237+
Mock Client Discovery
238+
---------------------------
239+
240+
You may find yourself testing parts of your application that are dependent on an
241+
HTTP Client using the Discovery Service, but do not necessarily need to perform
242+
the request nor contain any special configuration. In this case, the
243+
``Http\Mock\Client`` from the ``php-http/mock-client`` package is typically used
244+
to fake requests and keep your tests nicely decoupled. However, for the best
245+
stability in a production environment, the mock client is not set to be found
246+
via the Discovery Service. Attempting to run a test which relies on discovery
247+
and uses a mock client will result in an ``Http\Discovery\Exception\NotFoundException``.
248+
Thankfully, Discovery gives us a Mock Client strategy that can be added straight
249+
to the Discovery. Let's take a look::
250+
251+
use MyCustomService;
252+
use Http\Mock\Client as MockClient;
253+
use Http\Discovery\HttpClientDiscovery;
254+
use Http\Discovery\Strategy\MockClientStrategy;
255+
256+
class MyCustomServiceTest extends TestCase
257+
{
258+
public function setUp()
259+
{
260+
HttpClientDiscovery::prependStrategy(MockClientStrategy::class);
261+
262+
$this->service = new MyCustomService;
263+
}
264+
265+
public function testMyCustomServiceDoesSomething()
266+
{
267+
// Test...
268+
}
269+
}
270+
271+
In the example of a test class above, we have our ``MyCustomService`` which
272+
relies on an HTTP Client implementation. We do not need to test that the actual
273+
request our custom service makes is successful in this test class, so it makes
274+
sense to use the Mock Client. However, we do want to make sure that our
275+
dependency injection using the Discovery service properly works, as this is a
276+
major feature of our service. By calling the ``HttpClientDiscovery``'s
277+
``prependStrategy`` method and passing in the ``MockClientStrategy`` namespace,
278+
we have now added the ability to discover the mock client and our tests will
279+
work as desired.
280+
281+
It is important to note that you must explicitly enable the ``MockClientStrategy``
282+
and that it is not used by the Discovery Service by default. It is simply
283+
provided as a convenient option when writing tests.
284+
236285
Integrating your own implementation with the discovery mechanism using Puli
237286
---------------------------------------------------------------------------
238287

0 commit comments

Comments
 (0)