cerbero/behat-laravel-extension

Behat 的 Laravel 扩展

安装: 67

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 73

类型:behat-extension

1.0.1 2016-04-11 13:01 UTC

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. 编写一些功能

example

您已经准备就绪!开始编写一些功能。如果您想获得一个快速示例以开始,请参阅此项目

注意:如果您想在 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收件箱。