heybigname/phpspec-laravel

使用 PhpSpec 测试您的 Laravel 应用程序

v4.0 2018-04-20 08:43 UTC

This package is auto-updated.

Last update: 2024-09-20 20:16:08 UTC


README

这个扩展来自 Ben Constable,但我因为它不再维护而将其分支。

phpspec 扩展,用于测试 Laravel 应用程序。

版本

根据您使用的 Laravel 和/或 PhpSpec 版本,请确保您使用的是适合您的这个包版本。使用下表选择正确的版本。

安装

使用 composer 安装此包

composer require --dev "heybigname/phpspec-laravel"

然后在您的 phpspec.yml 中添加以下内容

extensions:
  PhpSpec\Laravel\Extension\LaravelExtension: ~

您可以在 example.phpspec.yml 中查看针对 Laravel 项目的一组合理的 PhpSpec 默认设置。

为什么使用这个扩展?

此扩展在编写 PhpSpec 测试时提供初始化的 Laravel 环境。

它允许您使用 Laravel 提供的一些不错特性,如类别名和辅助函数,而不会受到测试框架的限制。

此扩展 不是 Laravel 内置 PHPUnit 设置的替代品。如果您想进行集成和/或功能测试,请使用那个,BehatCodeception

配置

测试环境

默认情况下,此扩展会在 testing 环境中初始化 Laravel。您可以通过设置 phpspec.yml 来将其更改为生产环境(或您喜欢的任何环境)。

extensions:
  PhpSpec\Laravel\Extension\LaravelExtension:
    testing_environment: "production"

在您的 phpspec.yml 中设置。

应用程序初始化路径

默认情况下,此扩展将通过在 vendor/ 目录的上一级目录中查找 bootstrap/app.php 来初始化您的应用程序。这是 Laravel 提供的默认位置。

如果您使用的是非标准安装,您可以手动指定初始化文件的路径,如下所示

extensions:
  PhpSpec\Laravel\Extension\LaravelExtension:
    framework_path: "/non/standard/laravel/setup/app.php"

您可以选择指定绝对路径(使用前导斜杠),或者相对于 vendor/ 目录的路径。

使用

无 Laravel 的测试

如果您不使用任何特定于 Laravel 环境的代码,那么您不需要做任何不同的事情。只需像平常一样编写您的 PhpSpec 测试即可!

使用 Laravel 的测试

如果您想利用 Laravel 的别名或使用其一些 辅助函数,则从 PhpSpec\Laravel\LaravelObjectBehavior 扩展您的规范。这将防止在测试时出现错误。

例如,此类使用了一个别名

<?php
namespace App;

use Inspiring;

class MyInspiring extends Inspiring
{
    public function quoteBackwards()
    {
        return strrev(parent::quote());
    }
}

如果没有从 PhpSpec\Laravel\LaravelObjectBehavior 扩展

<?php
namespace spec\App;

use PhpSpec\ObjectBehavior;

class MyInspiringSpec extends ObjectBehavior
{
    function it_inspires_backwards()
    {
        $this->quoteBackwards()->shouldBeString();
    }
}

您将得到 Fatal error: Class 'Inspiring' not found...。但是,如果从 PhpSpec\Laravel\LaravelObjectBehavior 扩展

<?php
namespace spec\App;

use PhpSpec\Laravel\LaravelObjectBehavior;

class MyInspiringSpec extends LaravelObjectBehavior
{
    function it_inspires_backwards()
    {
        $this->quoteBackwards()->shouldBeString();
    }
}

您将得到 ✔ inspires backwards

此类使用了一个辅助函数

<?php
namespace App;

class MyEncryptor
{
    public function encrypt($arg)
    {
        return bcrypt($arg);
    }
}

如果没有从 PhpSpec\Laravel\LaravelObjectBehavior 扩展

<?php
namespace spec\App;

use PhpSpec\ObjectBehavior;

class MyEncryptor extends ObjectBehavior
{
    function it_encrypts_a_string()
    {
        $this->encrypt()->shouldBeString();
    }
}

您将得到 Fatal error: Call to a member function make() on a non-object...。但是,如果从 PhpSpec\Laravel\LaravelObjectBehavior 扩展

<?php
namespace spec\App;

use PhpSpec\Laravel\LaravelObjectBehavior;

class MyEncryptor extends LaravelObjectBehavior
{
    function it_encrypts_a_string()
    {
        $this->encrypt()->shouldBeString();
    }
}

您将得到 ✔ encrypts a string

访问 IoC 容器

如果您需要在您的规范中访问 服务容器,只需使用 app() 辅助函数!

了解更多关于 phpspec 和 Laravel 的信息

Laracasts 提供了一些关于 phpspec 和 Laravel 的优秀指南。《Laravel, phpspec 和重构》(链接)是一个很好的入门点;它展示了如何使用 phpspec 与 Laravel 结合,并涵盖了编写测试的基础(而且它是免费的!

贡献

请参阅CONTRIBUTING.md

许可证

MIT © Ben Constable。更多详情请参阅LICENSE

感谢

感谢以下人员...

  • @obrignoni 为使此扩展与 Laravel 5 兼容所作的出色工作
  • @Sam-Burns 为使此扩展与 Phpspec v3 兼容所作的出色工作
  • 所有其他贡献者,以及向项目报告问题和错误的所有人