Laravel 4工作台,无法访问照明外墙


Laravel 4 workbench, can't access Illuminate facades

我正在Laravel工作台上开发一个包。

在编写包单元测试时,我需要使用一些 Illuminate 功能,例如我需要使用 Artisan 外观。所以,这是我的作曲家.json

"require": {
    "php": ">=5.3.0",
    "illuminate/support": ">=4.0.0"
},

这是我的测试用例设置:

use Illuminate'Support'Facades'Artisan;
class myTest extends 'PHPUnit_Framework_TestCase {
    public function setUp() {
        parent::setUp();
        Artisan::call('migrate');
    }
}

我在测试运行期间PHP Fatal error: Call to a member function call() on a non-object收到此错误。为什么?

我会尝试提供帮助。我只是在喋喋不休,但希望它能让你朝着正确的方向前进。

你看过门面课吗?我不认为这不是他们的工作方式。

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Support/Facades/Artisan.php

为了能够调用 Artisan 外观,您需要将其绑定到 IoC 容器中以便可以解析(尽管我不确定您的单元测试是否足以引导 Laravel 到那个点(。您可能应该做的是实例化您想要的实际对象:

https://github.com/laravel/framework/blob/ef0864242e6e6f19a78f941b0710c844016ddf6e/src/Illuminate/Foundation/Artisan.php

$artisan = new Illuminate'Foundation'Artisan($this->app);

然后,您可以执行以下操作:

$artisan->migrate(); // Trigger the __call() method of the Artisan class

不过,归根结底,我认为尝试在单元测试中进行数据库迁移是错误的。在我看来,这是一个集成或[在此处插入最喜欢的流行语]类型测试,在这个级别上,数据库的东西应该被嘲笑。

这里有一个示例文章/模板,用于启动带有外观生成的Laravel工作台https://github.com/jaiwalker/setup-laravel4-package