damianua / phpspec-laravel
使用 PhpSpec 测试您的 Laravel 应用程序
Requires
- php: ^7.0
- laravel/framework: ^5.4
- phpspec/phpspec: ^4.0
This package is auto-updated.
Last update: 2024-09-14 10:33:16 UTC
README
这个扩展来自 Ben Constable,但我之所以把它分支出来,是因为它不再被维护。
版本
根据您使用的 Laravel 和/或 PhpSpec 版本,请确保您使用适合您的此包版本。使用下表选择正确的版本。
安装
使用 composer 安装此包
composer require --dev "heybigname/phpspec-laravel"
然后将其添加到您的 phpspec.yml
extensions: PhpSpec\Laravel\Extension\LaravelExtension: ~
您可以在 example.phpspec.yml
中查看一组合理的 phpspec 默认值,适用于 Laravel 项目。
为什么选择这个扩展?
此扩展在编写 phpspec 测试时为您提供了启动的 Laravel 环境。
它允许您使用 Laravel 提供的一些优秀功能,如类别名和辅助函数,而不会受到测试框架的限制。
此扩展不是 Laravel 内置 PHPUnit 设置的替代品。如果您想进行集成和/或功能测试,请使用它,Behat 或 Codeception。
配置
测试环境
默认情况下,该扩展在 testing
环境中启动 Laravel。您可以通过设置来更改此设置
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 and refactoring》是一个好的起点;它展示了如何使用 phpspec 与 Laravel 一起使用,并涵盖了编写测试的基础(它是免费的!)。
贡献
许可证
MIT © Ben Constable。有关更多信息,请参阅LICENSE。
感谢
感谢以下人员...
- @obrignoni,他们使此扩展与Laravel 5兼容的工作做得非常出色
- @Sam-Burns,他们使此扩展与Phpspec v3兼容的工作做得非常出色
- 所有其他贡献者以及所有报告了项目问题和错误的人