测试一个 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:创建作曲家包的最佳场所

Laravel 4 PHPUnit Sqlite 数据库,每次测试前删除项目

应该如何为 laravel 4 composer 包设置 git 子模块?

基于 Laravel 开发博客应用系列 —— 从测试开始:使用Gulp实现自动化测试