1. Go to this page and download the library: Download pact-foundation/pact-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pact-foundation / pact-php example snippets
namespace App\Tests;
use App\Service\HttpClientService;
use PhpPact\Consumer\InteractionBuilder;
use PhpPact\Consumer\Matcher\Matcher;
use PhpPact\Consumer\Model\ConsumerRequest;
use PhpPact\Consumer\Model\ProviderResponse;
use PhpPact\Standalone\MockService\MockServerConfig;
use PHPUnit\Framework\TestCase;
class ConsumerServiceHelloTest extends TestCase
{
public function testGetHelloString(): void
{
$matcher = new Matcher();
// Create your expected request from the consumer.
$request = new ConsumerRequest();
$request
->setMethod('GET')
->setPath('/hello/Bob')
->addHeader('Content-Type', 'application/json');
// Create your expected response from the provider.
$response = new ProviderResponse();
$response
->setStatus(200)
->addHeader('Content-Type', 'application/json')
->setBody([
'message' => $matcher->term('Hello, Bob', '(Hello, )[A-Za-z]+')
]);
// Create a configuration that reflects the server that was started. You can create a custom MockServerConfigInterface if needed.
$config = new MockServerConfig();
$config
->setConsumer('jsonConsumer')
->setProvider('jsonProvider')
->setPactDir(__DIR__.'/../../../pacts');
if ($logLevel = \getenv('PACT_LOGLEVEL')) {
$config->setLogLevel($logLevel);
}
$builder = new InteractionBuilder($config);
$builder
->uponReceiving('A get request to /hello/{name}')
->with($request)
->willRespondWith($response); // This has to be last. This is what makes FFI calls to register the interaction and start the mock server.
$service = new HttpClientService($config->getBaseUri()); // Pass in the URL to the Mock Server.
$helloResult = $service->getHelloString('Bob'); // Make the real API request against the Mock Server.
$verifyResult = $builder->verify(); // This will verify that the interactions took place.
$this->assertTrue($verifyResult); // Make your assertions.
$this->assertEquals('Hello, Bob', $helloResult);
}
}
namespace App\Tests;
use GuzzleHttp\Psr7\Uri;
use PhpPact\Standalone\ProviderVerifier\Model\VerifierConfig;
use PhpPact\Standalone\ProviderVerifier\Verifier;
use PhpPactTest\Helper\PhpProcess;
use PHPUnit\Framework\TestCase;
class PactVerifyTest extends TestCase
{
private PhpProcess $process;
protected function setUp(): void
{
$this->process = new PhpProcess(__DIR__ . '/path/to/public/');
$this->process->start();
}
protected function tearDown(): void
{
$this->process->stop();
}
/**
* This test will run after the web server is started.
*/
public function testPactVerifyConsumer()
{
$config = new VerifierConfig();
$config->getProviderInfo()
->setName('jsonProvider') // Providers name to fetch.
->setHost('localhost')
->setPort($this->process->getPort());
$config->getProviderState()
->setStateChangeUrl(new Uri(sprintf('http://localhost:%d/pact-change-state', $this->process->getPort())))
;
if ($level = \getenv('PACT_LOGLEVEL')) {
$config->setLogLevel($level);
}
$verifier = new Verifier($config);
$verifier->addFile(__DIR__ . '/path/to/pacts/jsonConsumer-jsonProvider.json');
$verifyResult = $verifier->verify();
$this->assertTrue($verifyResult);
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.