cevinio / behat-laravel-extension
Behat 的 Laravel 扩展
Requires
- php: >=8.1
- behat/behat: ^3.14
- behat/mink-browserkit-driver: ^2.2
- friends-of-behat/mink-extension: ^2.6.1
- laravel/framework: >=10.0
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
。