จะให้จุดสิ้นสุดสองสามจุดสำหรับการโต้ตอบหนึ่งครั้งใน pact 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)


คุณสามารถลองลงทะเบียนการโต้ตอบสองครั้งภายในการทดสอบ 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