narekps/codeception-wiremock-module

Codeception 的 WireMock 模块

1.0 2022-11-30 21:34 UTC

This package is auto-updated.

Last update: 2024-09-29 06:14:59 UTC


README

这个 Codeception 扩展允许开发者和测试人员在使用 codeception 测试时使用 WireMock 模拟外部服务。

codeception-wiremock-extension 连接到已运行的 WireMock 实例,也可以自动运行一个本地独立实例。它还能够下载您偏好的 WireMock 版本并运行它。测试完成后,它将关闭连接并关闭 Wiremock 服务(如果它启动了的话)。

另请参阅

注意

如果您需要一个具有与 WireMock 类似功能且 100% 由 PHP 实现的应用程序,请尝试 Phiremock:Phiremock,它还有一个很好的 codeception 扩展

安装

Composer

该项目已在 Packagist 上发布,因此您只需将其作为依赖项添加到 composer.json 中

$ composer require lamoda/codeception-wiremock-extension

配置示例

模块

此模块允许您连接到 WireMock 实例,它可以是扩展运行的实例或已运行的实例。

# acceptance.suite.yml
modules:
    enabled:
        - WireMock:
            host: my.wiremock.host # defaults to 127.0.0.1
            port: 80 # defaults to 8080

如何使用

准备您的应用程序

首先,配置您的应用程序,以便在测试时用 WireMock 替换其外部服务。例如,如果您向位于 http://your.rest.interface 的 REST 服务发送请求,请将配置中的该 URL 替换为 WireMock 运行的 URL,例如:https://:8080/rest_interface

编写您的测试

// YourCest.php
class YourCest extends \Codeception\TestCase\Test
{
    public function _after(\AcceptanceTester $I)
    {
        $I->resetMappingsAndRequestJournalInWireMock();
    }

    // tests
    public function tryToTest(\AcceptanceTester $I)
    {
        $I->expectRequestToWireMock(
            WireMock::get(WireMock::urlEqualTo('/some/url'))
                ->willReturn(WireMock::aResponse()
                ->withHeader('Content-Type', 'text/plain')
                ->withBody('Hello world!'))
        );
        // Here you should execute your application in a way it requests wiremock. I do this directly to show it. 
        $response = file_get_contents('https://:18080/some/url');
        
        $I->assertEquals('Hello world!', $response);
        $I->receivedRequestInWireMock(
            WireMock::getRequestedFor(WireMock::urlEqualTo('/some/url'))
        );
    }
    
    // Also, you can access wiremock-php library directly
    public function moreComplexTest()
    {
        $wiremockPhp = Codeception\Extension\WiremockConnection::get();
        // Now you can use wiremock-php library
    }
}