Bagaimana cara menyediakan beberapa titik akhir untuk satu interaksi dalam pakta PHP?

Bayangkan situasi di mana saya memiliki klien nyata yang ingin saya gunakan dalam pengujian unit konsumen, dan klien ini membuat dua permintaan di latar belakang.

Menyukai:

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

Dan metode getUserDataById mengirimkan dua panggilan ke penyedia sebelum mengembalikan data pengguna

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

dan jika saya ingin menggunakan klien ini dalam pengujian unit, saya perlu meniru kedua titik akhir

Bagaimana cara melakukan ini dalam satu interaksi? Contoh dengan satu respons konsumen https://github.com/mattermack/pact-php-example/blob/master/example-one/test/ExampleOneMeetupAPIClientTest.php


person Karol wololo    schedule 18.12.2019    source sumber


Jawaban (1)


Anda dapat mencoba mendaftarkan dua interaksi dalam 1 unit pengujian Misalnya:

$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);

Dan hal yang sama untuk interaksi kedua

Kemudian Anda dapat menghubungi

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

Ini akan mencapai kedua titik akhir dan memicu kedua interaksi. Setidaknya itulah yang telah saya lakukan dalam pengujian saya

person Viktor Melnychuk    schedule 21.01.2020