Как обеспечить несколько конечных точек для одного взаимодействия в пакете PHP?

Представьте себе ситуацию, когда у меня есть реальный клиент, который я хочу использовать в своем модульном тесте потребителя, и этот клиент делает два запроса в фоновом режиме.

Нравиться:

$service = new \TestClient($config->getBaseUri());
$serviceResponse = $service->getUserDataById(1);

И getUserDataById метод отправляет два вызова провайдеру перед возвратом пользовательских данных.

GET  someprovider/v1/username/{id}
GET  someprovider/v1/email/{id}

и если я хочу использовать этого клиента в модульном тесте, мне нужно издеваться над обеими конечными точками.

Как сделать это за одно взаимодействие? Пример с одним ответом потребителя https://github.com/mattermack/pact-php-example/blob/master/example-one/test/ExampleOneMeetupAPIClientTest.php


person Karol wololo    schedule 18.12.2019    source источник


Ответы (1)


Вы можете попробовать зарегистрировать два взаимодействия в одном модульном тесте. Например:

$interaction1 = new InteractionBuilder(config);
$interaction2 = new InteractionBuilder(config);
$consumerRequest1 = new ConsumerRequest();
$consumerRequest1
   ->setPath('someprovider/v1/username/{id}');
$providerResponse1 = new ProviderResponse();
$providerResponse1
     ->setBody(/* body here */);

$interaction1
    ->uponReceiving('request to /someprovider/v1/username/{id}')
    ->with($consumerRequest1)
    ->willRespondWith($providerResponse1);

И то же самое для второго взаимодействия

Тогда вы можете позвонить в

$service = new \TestClient($config->getBaseUri());
$serviceResponse = $service->getUserDataById(1);

Он затронет обе конечные точки и вызовет оба взаимодействия. По крайней мере, то, что я сделал в своих тестах

person Viktor Melnychuk    schedule 21.01.2020