Integration tests
Since your project uses the TechDivision\DynamicsBcApiClient\Api\RequestInterface, by default, integration tests
will try to call the actual REST API, which will fail but is also not desired.
To avoid this, this module provides a mocked client factory (see TechDivision\DynamicsBcApiClient\Test\Integration\MockedClientFactory).
-
Replacing the client factory for each integration test is painful and error-prone, so consider globally registering the mocked client factory as the default for the integration tests
-
The registration can be done by adding a preference file to
dev/tests/integration/etc/di/preferences/, e.g.dev/tests/integration/etc/di/preferences/project.php -
The project uses the
TechDivision\DynamicsBcApiClient\Api\RequestInterface -
The integration tests will attempt to call the actual REST API by default.
-
To prevent failed tests, this module provides a mocked client factory
-
see
\TechDivision\DynamicsBcApiClient\Test\Integration\MockedClientFactory
-
-
The client factory gets pre-registered by default for your project’s integration tests to replace the client factory in each integration test
-
Registration gets achieved by adding a preference file including file headers and copyright notice
dev/tests/integration/etc/di/preferences/.- Add the following code snippet to the file, including the file headers and copyright notice:
return [
\GuzzleHttp\ClientInterfaceFactory::class => \TechDivision\DynamicsBcApiClient\Test\Integration\MockedClientFactory::class,
];
|
Be sure to clear the integration test sandbox afterward to enforce this new setting throughout the test suite |
If you are writing integration tests after this, and they rely on data returned from a REST API, use the
'test class on \TechDivision\DynamicsBcApiClient\Test\Integration\BaseRequestUsageTestCase.
\GuzzleHttp\Handler\MockHandler to the mocked client factory and allows predictable responses to get included in the queue of the mirrored handler<?php
use \TechDivision\DynamicsBcApiClient\Test\Integration\BaseRequestUsageTestCase;
class MyTest extends BaseRequestUsageTestCase
{
public function testSomething(): void
{
//enqueue three responses of which the last simulates a 403 status code
$this->enqueueResponse(
$this->buildResponse(200, '{"foo": "bar"}')
);
$this->enqueueResponse(
$this->buildResponse(200, '{"foo": "bar"}')
);
$this->enqueueResponse(
$this->buildResponse(403, 'Forbidden - You are not allowed to access this resource', 'text/plain;charset=UTF-8')
);
//do something that relies on the responses
}
}