cevinio/behat-laravel-extension

Behat 的 Laravel 扩展

安装量: 17 321

依赖者: 0

建议者: 0

安全性: 0

星标: 3

关注者: 2

分支: 1

开放问题: 0

类型:behat-extension

4.0.0 2024-03-20 15:49 UTC

This package is auto-updated.

Last update: 2024-09-26 14:50:25 UTC


README

此扩展提供了一个简单(且快速)的方法,开始使用 Behat 测试和驱动您的 Laravel 应用程序。一些优点包括

  • 快速:它不依赖于像 Goutte 这样的任何东西,因此提供了一种超级快速的方式来测试您的 UI。您甚至不需要设置主机来运行测试。
  • 刷新:在每个场景之前自动重新启动 Laravel(因此像用户会话这样的内容不会持久化)。
  • 环境:在 Laravel 中指定用于不同应用环境的自定义环境文件(如 .env 文件)有点棘手。此扩展会自动为您处理。
  • 访问 Laravel:您可以从 FeatureContext 文件立即访问 Laravel(例如门面和此类内容)。

此存储库是从 laracasts/Behat-Laravel-Extension 分支出来的,因为它不再被维护。
感谢 Jeffrey Way 最初创建此扩展。

1. 安装

通过 Composer 将包作为开发依赖项要求。

composer require --dev cevinio/behat-laravel-extension

这将还会引入 Behat 和 Mink。

2. 创建 Behat.yml 配置文件

接下来,在您的项目根目录中创建一个 behat.yml 文件,并添加

default:
    extensions:
        Cevinio\Behat:
            # bootstrap_path: ~
            # env_path: ~
        Behat\MinkExtension:
            default_session: laravel
            laravel: ~
            files_path: "%paths.base%/tests/"

在这里,我们引用 Laravel 扩展,并告诉 Behat 使用它作为我们的默认会话。

您可以传递一个可选参数 env_path(目前在上文注释中),以指定应从您的测试中引用的环境文件名称。默认为空,将保持 Laravel 标准行为以查找 .env。如果您需要特殊的环境文件,可以将其设置为例如 .env.behat。此文件应像项目根目录中的标准 .env 文件一样,包含您的测试中任何特殊的环境变量(例如特殊接受测试特定的数据库)。

还可以通过设置可选参数 bootstrap_path(默认为 bootstrap/app.php)来指定替代引导文件。Behat 的 %paths.base% 将始终添加到该路径之前。

3. 设置 FeatureContext

从应用的根目录运行

vendor/bin/behat --init

它应该设置

features/bootstrap/FeatureContext.php

在此阶段,您应将其设置为扩展 MinkContext 并实现 LaravelAwareContext。您可以使用 LaravelAware 特性通过 $this->app() 获取对 Application 的访问。


<?php

use Behat\Behat\EventDispatcher\Event\BeforeScenarioTested;
use Behat\MinkExtension\Context\MinkContext;
use Cevinio\Behat\Context\LaravelAware;
use Cevinio\Behat\Context\LaravelAwareContext;
use Illuminate\Contracts\Foundation\Application;

/**
 * Defines application features from the specific context.
 */
class FeatureContext extends MinkContext implements LaravelAwareContext
{
    use LaravelAware;

    public function bootstrapLaravelEnvironment(BeforeScenarioTested $event): array
    {
        // This method is optional, if implemented the returned array is set in the Laravel environment for access via env().
        // This allows modification of configuration values on a per-scenario basis.
    }

    public function bootstrapLaravelApplication(Application $app, BeforeScenarioTested $event): void
    {
        // This method is optional. It allows access to the Application right after it was created.
        // This allows for example to call $app->bind() before any @BeforeScenario hook is called. 
    }
}

4. 编写一些功能

您已经准备就绪!开始编写一些功能。

注意:如果您想在 FeatureContext 文件中利用一些 Mink 辅助函数,请确保扩展 Behat\MinkExtension\Context\MinkContext