laracasts / 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-08-29 04:03:26 UTC
README
此扩展提供了一个非常简单(且快速)的方法来开始使用 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
Behat\MinkExtension:
default_session: laravel
laravel: ~
在这里,我们引用 Laravel 扩展,并告诉 Behat 使用它作为默认会话。您可以通过传递一个可选参数 env_path
(目前上面已注释)来指定测试中应引用的环境文件名称。默认情况下,它将在您的项目根目录中查找 .env.behat
文件。
此文件应像您的项目根目录中的标准 .env
文件一样,包含任何特殊的环境变量,用于您的测试(例如特殊接受测试特定的数据库)。
3. 设置 FeatureContext
从您的应用程序根目录运行
vendor/bin/behat --init
此时应设置
features/bootstrap/FeatureContext.php
在此阶段,您应该将其设置为扩展 MinkContext。
<?php
use Behat\Behat\Hook\Scope\AfterStepScope;
use Behat\Behat\Tester\Exception\PendingException;
use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Gherkin\Node\PyStringNode;
use Behat\Gherkin\Node\TableNode;
#This will be needed if you require "behat/mink-selenium2-driver"
#use Behat\Mink\Driver\Selenium2Driver;
use Behat\MinkExtension\Context\MinkContext;
/**
* Defines application features from the specific context.
*/
class FeatureContext extends MinkContext implements Context, SnippetAcceptingContext
{
4. 编写一些特性
您已经准备好开始!开始编写一些特性。如果您想要一个快速示例来开始,请参阅 此项目。
注意:如果您想在
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];
如果您单独工作,可以将该变量转储以查看可以对其编写断言的所有不同字段。在上面的示例中,我们确保了主题被正确设置,并且电子邮件正文与我们所创建的占位符匹配。
更好的是,在每个场景完成后,我们将通过在场景或 Feature 上面添加 @mail
标记来为您方便地清空 MailTrap 收件箱
@mail
Scenario: User will get notified
Given there are jobs that have been started by this user
Then when the report is done the user will get an email to let them know it is done
常见问题解答
我遇到了“PHP 致命错误:达到最大函数嵌套级别 '100',中断执行!”错误。
听起来您正在使用 Xdebug。 增加最大嵌套级别。