我正在Laravel工作台上开发一个包。
在编写包单元测试时,我需要使用一些 Illuminate 功能,例如我需要使用 Artisan 外观。所以,这是我的作曲家.json
"require": {
"php": ">=5.3.0",
"illuminate/support": ">=4.0.0"
},
这是我的测试用例设置:
use IlluminateSupportFacadesArtisan;
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 IlluminateFoundationArtisan($this->app);
然后,您可以执行以下操作:
$artisan->migrate(); // Trigger the __call() method of the Artisan class
不过,归根结底,我认为尝试在单元测试中进行数据库迁移是错误的。在我看来,这是一个集成或[在此处插入最喜欢的流行语]类型测试,在这个级别上,数据库的东西应该被嘲笑。
这里有一个示例文章/模板,用于启动带有外观生成的Laravel工作台https://github.com/jaiwalker/setup-laravel4-package