seec / behat-test-runner
组件,用于帮助进行Behat扩展开发的自测试
8.2.5
2023-08-02 22:54 UTC
Requires
- php: ^7.4|^8.0
- ext-curl: *
- behat/behat: ^3.0.0
- seec/phpunit-consecutive-params: ^1
- symfony/finder: ^5|^6
- symfony/process: ^4.4|^5.0
- webmozart/assert: ^1.11
Requires (Dev)
- behat/behat: ^3.7
- friends-of-behat/variadic-extension: ^1.3
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^7|^8|^9|^10
- symplify/easy-coding-standard: ^11.3
This package is auto-updated.
Last update: 2024-09-12 00:36:20 UTC
README
Behat Test Runner基本上是一个Behat上下文类,它提供了测试Behat扩展的步骤。你可以组装一个功能文件和behat.yml配置,然后测试运行程序将启动第二个Behat进程来评估创建的功能文件。这是用于Magento2 Behat扩展的原始测试套件的分支。与原始版本不同,此分支不支持过时的PHP版本,除了PHP 7.4,许多项目仍在使用它。
安装
通过在composer.json
中添加来安装
composer require --dev seec/behat-test-runner
配置
在behat.yml
中包含上下文文件,如下所示
default: suites: default: contexts: - SEEC\BehatTestRunner\Context\TestRunnerContext
你可以这样配置工作目录(可选)
default: suites: default: contexts: - SEEC\BehatTestRunner\Context\TestRunnerContext: workingDirectory: path/to/your/working/dir # if not provided then a temporary working dir is autogenerated
用法
只需从上下文文件中使用必要的步骤来组装你的功能。
示例
Feature: Visiting a page on the website In order to demonstrate how to use test runner As a developer I should open a page and verify the content of it Background: Given I have the file "index.html" in document root: """ <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test page</title> </head> <body> <h1>Lorem ipsum dolor amet.</h1> </body> </html> """ And I have a web server running on host "localhost" and port "8080" And I have the feature: """ Feature: Test runner demo feature Scenario: Given I open the index page Then I should see the content "Lorem ipsum" on the page in a h1 HTML tag """ And I have the context: """ <?php declare(strict_types=1); use Behat\Behat\Context\Context; use Webmozart\Assert\Assert; include '/var/www/html/vendor/autoload.php'; final class FeatureContext implements Context { private array $clipboard = []; /** * @return mixed */ private function get(string $key) { Assert::keyExists($this->clipboard, $key, sprintf('Key "%s" does not exist in clipboard', $key)); return $this->clipboard[$key]; } /** * @var mixed $value */ private function set(string $key, $value) { $this->clipboard[$key] = $value; } /** * @Given I open the index page */ function firstStep() { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://localhost:8080/"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); Assert::notNull($response, 'Response is null: ' . curl_error($curl)); $this->set('response', $response); curl_close($curl); } /** * @Then I should see the content :content on the page in a :tagName HTML tag */ function secondStep(string $content, string $tagName) { $lastResponse = $this->get('response'); Assert::notNull($lastResponse, 'Response is null'); $pattern = '/<' . $tagName . '.*?>(.*?)<\/' . $tagName . '>/si'; preg_match($pattern, $lastResponse, $matches); Assert::notSame(0, count($matches), 'No matches found'); Assert::notFalse(strpos($matches[1], $content), 'Content not found in tag'); } } """ Scenario: Visiting the index.html page When I run Behat Then I should not see a failing test