gleman17 / behat-laravel-extension
Laravel扩展Behat的分支,允许使用Laravel 9
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-08 22:21:13 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。请增加最大嵌套级别。