PHPUnit/Laravel静态类到方法生成错误
我在使用PHPUnit测试我正在编写的Laravel包时遇到了问题。我正在编写一个扩展formbuilder的类,我已经在我自己的类和父类(lightize\Html\formbuilder)上尝试过它,但是我得到了相同的错误 我的测试是PHPUnit/Laravel静态类到方法生成错误,php,laravel,laravel-4,phpunit,Php,Laravel,Laravel 4,Phpunit,我在使用PHPUnit测试我正在编写的Laravel包时遇到了问题。我正在编写一个扩展formbuilder的类,我已经在我自己的类和父类(lightize\Html\formbuilder)上尝试过它,但是我得到了相同的错误 我的测试是 use Illuminate\Html\FormBuilder as Form; class FormBuilderTest extends PHPUnit_Framework_TestCase { function test_basic_input
use Illuminate\Html\FormBuilder as Form;
class FormBuilderTest extends PHPUnit_Framework_TestCase {
function test_basic_input() {
$html = Form::text('test');
$this->assertContains('input', $html);
}
}
此操作失败,并显示以下消息
假设$this来自不兼容的上下文,则不应静态调用非静态方法illumb\Html\FormBuilder::text()
我不知道这是怎么回事,据我所知,这是在框架中从blade发出的同一个静态调用
有人能用这个方法告诉我写的方向吗?正如错误所示,它不是一个静态方法 尝试:
但是我不熟悉Laravel,也不熟悉
illighted\Html\FormBuilder
,我不确定它是否有需要一些选项的构造函数。问题是您将FormBuilder
别名为Form
。那只对了一半。因为Form
类是访问FormBuilder
的门面,如果要使用静态调用Form::text()
调用它,则需要使用实际的门面
这意味着只需移除
use Illuminate\Html\FormBuilder as Form;
如果您有“名称空间问题”,请添加此use语句
use Illuminate\Support\Facades\Form;
或者,您也可以使用$this->app
$form = $this->app['form'];
$html = $form->text();
我已经找出了这个问题的症结所在,我在Laravel的工作台目录下运行phpunit。这不是必要的课程,我试着改变我的课程来解决这个问题。我将测试存储在workbench/tests目录中,并将phpunit.xml指向它,但从根Laravel项目目录运行它。我的课现在看起来简单多了。谢谢你们的帮助
<?php
class FormBuilderTest extends TestCase {
function test_basic_input() {
$html = Form::text('text');
$this->assertContains('input', $html);
}
}
<?php
class FormBuilderTest extends TestCase {
function test_basic_input() {
$html = Form::text('text');
$this->assertContains('input', $html);
}
}