cerbero / behat-laravel-extension
Behat 的 Laravel 扩展
Requires
- php: >=5.4
- behat/behat: ~3.0
- behat/mink-browserkit-driver: ~1.2
Requires (Dev)
- behat/mink-extension: ~2.0
- phpspec/phpspec: ~2.1
- symfony/symfony: ~2.6
This package is auto-updated.
Last update: 2024-09-04 22:04:57 UTC
README
此包仅用于添加将自定义路径设置为 Laravel 启动文件的权限。
请注意,这是一个临时包,将持续到自定义路径被整合到原始包中。
所有荣誉归Jeffrey Way(作者)和Kyle Ferguson(实现了自定义路径)所有。
此扩展提供了一种极其简单(且快速)的方式,开始使用 Behat 测试和驱动您的 Laravel 应用程序。一些优点包括
- 快速:它不依赖于 Goutte 等任何东西,因此提供了一种超快的 UI 测试方式。您甚至不需要设置主机来运行测试。
- 刷新:在每个场景之后,Laravel 会自动重启(因此像用户会话这样的东西将不会被持久化)。
- 环境:在 Laravel 5 中,指定用于不同应用程序环境的自定义环境文件(如
.env
)有些棘手。此扩展会为您自动处理。默认情况下,它会在项目根目录中查找.env.behat
文件。 - 访问 Laravel:您可以从
FeatureContext
文件中立即访问 Laravel(如门面等)。 - 工作流程:提供了一些有用的特质,可以加快您的工作流程。
要开始使用,您只需遵循几个步骤
更喜欢视频教程?请参阅Laracasts 中的此课程。
1. 安装依赖项
像往常一样,我们需要通过 Composer 拉取一些依赖项。
composer require behat/behat behat/mink behat/mink-extension laracasts/behat-laravel-extension --dev
这将使我们能够访问 Behat、Mink,当然,还有 Laravel 扩展。
2. 创建 Behat.yml 配置文件
接下来,在您的项目根目录中创建一个 behat.yml
文件,并添加以下内容:
default:
extensions:
Laracasts\Behat:
# env_path: .env.behat
# bootstrap_path: bootstrap/app.php
Behat\MinkExtension:
default_session: laravel
laravel: ~
在这里,我们引用 Laravel 扩展,并告诉 Behat 使用它作为我们的默认会话。您可以传递一个可选参数 env_path
(目前在上面的注释中已注释),以指定应从您的测试中引用的环境文件的名称。默认情况下,它将查找项目根目录中的 .env.behat
文件。
此文件应与项目根目录中的标准 .env
文件类似,包含任何针对您的测试的特殊环境变量(例如,特定的接受测试数据库)。
如果 Laravel 的 bootstrap_path
不在默认位置,您可以指定一个自定义路径。
3. 编写一些功能
您已经准备就绪!开始编写一些功能。如果您想获得一个快速示例以开始,请参阅此项目。
注意:如果您想在
FeatureContext
文件中利用一些 Mink 辅助函数,请确保扩展Behat\MinkExtension\Context\MinkContext
。
功能上下文特质
为了方便,此包还包含了一些特质,用于简化常见任务,例如迁移数据库、使用数据库事务或测试邮件。
迁移器
您经常会发现自己需要在每个场景之前迁移测试数据库。简单!只需将 Laracasts\Behat\Context\Migrator
特质拉入您的 FeatureContext
,如下所示
// ... use Laracasts\Behat\Context\Migrator; class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext { use Migrator; }
就这样!特征将会完成剩余的工作。在每次场景运行之前,如果您的数据库需要迁移,它将会进行迁移!
数据库事务
另一方面,您可能更喜欢通过数据库事务来运行所有测试。您将获得不错的速度提升,因为数据实际上永远不会保存到数据库中。为了利用这一点,再次引入Laracasts\Behat\Context\DatabaseTransactions
特征,如下所示
// ... use Laracasts\Behat\Context\DatabaseTransactions; class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext { use DatabaseTransactions; }
一旦引入这个特征,在每次场景运行之前,它将开始一个新的事务。并且当场景完成时,我们会为您回滚。
服务:MailTrap
特别是在功能测试时,测试您的邮件与真实测试服务器(而不是模拟它,并希望格式正确)可能很有益。如果您是MailTrap(强烈推荐)的粉丝,这个扩展可以帮助您!
如果您还没有,请快速创建一个账户(免费)并在MailTrap.io上创建一个收件箱。接下来,更新您的config/mail.php
以使用MailTrap提供的设置,或者修改您的.env.behat
变量以引用它们。一旦您配置了应用程序使用MailTrap,我们需要的另一件事就是您的MailTrap API密钥和我们应该使用的默认收件箱ID。在config/services.php
中使这些可用。以下是一个示例
'mailtrap' => [ 'secret' => 'YOUR API KEY', 'default_inbox' => 'ID OF THE MAILTRAP INBOX YOU CREATED' ]
这就完成了!现在,只需引入特征,您就可以开始了!让我给您演示一下
<?php // ... use Laracasts\Behat\Context\Services\MailTrap; use PHPUnit_Framework_Assert as PHPUnit; class DmcaContext extends MinkContext implements SnippetAcceptingContext { use MailTrap; /** * @Then an email should be sent to YouTube */ public function anEmailShouldBeSentToYoutube() { $lastEmail = $this->fetchInbox()[0]; $stub = file_get_contents(__DIR__ . '/../stubs/dmca-complete.txt'); PHPUnit::assertEquals('DMCA Notice', $lastEmail['subject']); PHPUnit::assertContains($stub, $lastEmail['text_body']); } }
请注意对fetchInbox()
的调用?这将向MailTrap发送API请求,返回您收件箱中所有消息/电子邮件的数组。因此,如果您想对MailTrap收件箱中最最近接收到的电子邮件编写一些断言,您可以这样做
$lastEmail = $this->fetchInbox()[0];
如果独立工作,您可以将该变量导出以查看您可能编写断言的所有不同字段。在上面的示例中,我们确保主题被正确设置,并且电子邮件正文与我们所创建的占位符相匹配。
更好的是,在每个场景完成后,我们将为您方便地清空MailTrap收件箱。