测试一个 Laravel 包
Posted
技术标签:
【中文标题】测试一个 Laravel 包【英文标题】:Testing a Laravel package 【发布时间】:2016-08-30 21:23:14 【问题描述】:所以,我正在编写一个基本的 Laravel 包,我似乎偶然发现了另一个问题,这次是测试。
开发中的包目前位于项目根目录的packages
文件夹中。我已经修改了包的composer.json
文件以包含我需要的依赖项
"require-dev":
"phpunit/phpunit": "~4.0",
"laravel/laravel": "dev-develop"
但是,每当我尝试在包文件夹(其中包含一个名为 tests
的文件夹以及示例测试)中运行 phpunit tests
时,我都会收到以下错误:
PHP 致命错误:在第 8 行的 /workspace/laravel/packages/sample/http-request/tests/HttpRequestTest.php 中找不到类“Illuminate\Foundation\Testing\TestCase”
测试文件只是自动生成的存根:
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class HttpRequestTest extends Illuminate\Foundation\Testing\TestCase
/**
* A basic test example.
*
* @return void
*/
public function testExample()
$this->assertTrue(true);
知道为什么这不起作用吗?应用程序测试运行顺利,但应用程序本身除了包装盒中的内容外没有其他依赖项。
解决方案
通过扩展 PHPUnit_Framework_TestCase 使其独立工作:
class HttpRequestTest extends PHPUnit_Framework_TestCase
但是,像这样运行它:
vendor/bin/phpunit packages/yourname/package-name/
效果也很好,所以我选择它作为答案。
【问题讨论】:
感谢您希望在此处添加解决方案。将来,请在问题下方添加它作为答案 - 我们喜欢在此处明确区分问答。干杯! 【参考方案1】:这对我有用:
class HttpRequestTest extends TestCase
并运行测试:
vendor/bin/phpunit packages/yourname/package-name/
【讨论】:
不,还是什么都找不到它也适用于我的地方 我已经更新了帖子,我正在运行这样的包测试并且它有效。 啊,太好了。有用。然而,它使用了应用程序的依赖项,这对于 TravisCI 来说是不可行的。我找到了另一种方法——我只是使用 PHPUnit 捆绑的 TestCase。 谢谢,这个对我有帮助。【参考方案2】:(代表 OP 作为答案发布)。
通过扩展 PHPUnit_Framework_TestCase 使其独立工作:
class HttpRequestTest extends PHPUnit_Framework_TestCase
但是,像这样运行它:
vendor/bin/phpunit packages/yourname/package-name/
效果也很好,所以我选择它作为答案。
【讨论】:
【参考方案3】:对于 Windows 环境,您需要使用反斜杠!
vendor\bin\phpunit packages\yourname\package-name
【讨论】:
【参考方案4】:在包的根目录下创建一个名为tests
的目录,并在其中编写各种测试类。您可以将包的所有功能放在一个类中的各种方法中,也可以使用多个类。
移动到项目的根目录并运行以下命令,
vendor/bin/phpunit packages/YOUR_DIRECTORY_NAME/PACKAGE_NAME
稍等片刻,您将获得测试用例的响应。将显示阳性和阴性测试的数量。
【讨论】:
以上是关于测试一个 Laravel 包的主要内容,如果未能解决你的问题,请参考以下文章
使用 PhpUnit 测试在 Laravel 5 包中包含 @include 或 @extend 指令的刀片视图
如何在 Laravel 项目中为我自己的包运行 php 测试?
Laravel 4 PHPUnit Sqlite 数据库,每次测试前删除项目