我正在开发Laravel Workbench中的软件包。
在编写包单元测试时,我需要使用一些Illuminate功能,例如我需要使用Artisan外观。所以,这是我的composer.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
。为什么呢?
答案 0 :(得分:0)
我会帮助你。我只是喋喋不休地说道,但希望它能让你朝着正确的方向前进。
你看过门面课了吗?我认为这不是他们的工作方式。
https://github.com/laravel/framework/blob/4.2/src/Illuminate/Support/Facades/Artisan.php
为了能够调用Artisan外观,你需要将它绑定在IoC容器中以便可以解决它(尽管我不确定你的单元测试是否足以引导Laravel到那一点)。你可能应该做的是实例化你想要的实际对象:
$artisan = new Illuminate\Foundation\Artisan($this->app);
然后你可以做类似的事情:
$artisan->migrate(); // Trigger the __call() method of the Artisan class
但是,在一天结束时,我认为尝试在单元测试中进行数据库迁移错误。在我看来,这是一个集成或[插入喜欢的流行语这里]类型测试,在这个级别数据库的东西应该被嘲笑。
答案 1 :(得分:0)
这是一个示例文章/模板,用于启动使用Facade Generation的laravel工作台 https://github.com/jaiwalker/setup-laravel4-package