【问题标题】:using orchestral testbench in laravel workbench - class not found在 laravel 工作台中使用管弦乐测试台 - 找不到类
【发布时间】:2014-09-19 06:19:08
【问题描述】:

我能够设置 PHPUnit 并从工作台包进行一些基本测试,但我发现我无法使用我的工作台外观或对使用 Illuminate 组件的任何方法进行任何测试(例如,我的测试使用Config::get() 的东西失败了,因为应用程序还没有真正启动,所以那个门面不存在)。我浏览了几个站点,发现 Orchestral Testbench 包应该能够在 CLI 上引导应用程序并允许进行这种测试,所以我将它安装在我的主应用程序 composer.json 文件中并运行 composer update orchestra/testbench。显然,一切都安装得很好。我的工作台包工作得很好——服务提供者和门面都设置在app/config/app.php 中,我的测试路由调用门面并在我的包配置文件中输出一个虚拟字符串按预期工作。所以我知道工作台包设置正确,这意味着我的测试必须设置错误。这是我的匿名测试文件:

class FrameworkTests extends \Orchestra\Testbench\TestCase
{
    protected function getPackageProviders()
    {
        return array('MyVendor\MyPackage');
    }

    protected function getPackageAliases()
    {
        return array(
            'MyVendor' => 'MyVendor\Facade'
        );
    }

    public function testGetConfigValue()
    {
        $this->assertStringStartsWith('foo', MyPackage::getConfigValue());
    }
}

当我从 CLI 运行 phpunit 时,我收到此错误:

Fatal error: Class 'MyVendor\MyPackage' not found in /home/tmountjr/projects/myproject/workbench/myvendor/my-package/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 158

我不知道从这里去哪里,也不知道要查看哪些文件。除非我做错了什么,否则使用 Testbench 并不像自述文件所说的那么简单......

ETA:在上面睡觉后离得更近了一点。我意识到getPackageProvidersgetPackageAliases 可能需要看起来像app/config/app.php 中的内容,所以我分别使用MyVendor\MyPackage\MyPackageServiceProviderMyVendor\MyPackage\Facades\MyPackage 修改了条目。现在我在测试中遇到错误:

Non-static method MyVendor\MyPackage\MyClass::getConfigValue() should not be called statically, assuming $this from incompatible context.

我认为这意味着 Facade 部分不起作用,因为该 Facade 应该采用非静态类方法并使其像静态一样可用,对吗?

【问题讨论】:

    标签: php laravel-4 phpunit


    【解决方案1】:

    除非你精通 Laravelese,否则文档并不清楚的是,重载的 getPackageProviders()getPackageAliases() 方法应该返回与 @987654325 中的 providersaliases 条目完全相同的行@ 文件。 (文档看起来只是使用了稍微不同的命名法,只是供应商和包名称,而不是实际条目。)当然,在盯着它几个小时后,这对我来说很有意义,但在文档。如果其他人遇到此问题并做出与我相同的假设,希望这会有所帮助。

    【讨论】:

    • 你的意思是这两个方法返回的everything应该和app/config/app.php一样吗? IE。 'providers' => [ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, 等等....?
    • 这就是从 OP 的回答中理解的......但是,如果您查看代码,您编写的测试用例返回的数组将与 Orchestra 中“假”Laravel 应用程序中定义的别名合并测试台...没有解决我的问题:我的包中的外观仍未找到。
    • overrideApplicationProviders() 方法实际上 do 覆盖了所有提供者,因此需要返回提供者来注册 Laravel 应用所需的服务。
    猜你喜欢
    • 2016-01-15
    • 1970-01-01
    • 2013-09-01
    • 2013-05-30
    • 1970-01-01
    • 2014-03-05
    • 2014-07-08
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多