我在使用PHPUnit测试我正在编写的Laravel包时遇到了麻烦。我正在编写一个扩展formbuilder的类,我已经尝试过针对我自己的类和父类,(Illuminate \ Html \ Formbuilder),但是我得到了同样的错误。
我的测试是
use Illuminate\Html\FormBuilder as Form;
class FormBuilderTest extends PHPUnit_Framework_TestCase {
function test_basic_input() {
$html = Form::text('test');
$this->assertContains('input', $html);
}
}
此操作失败并显示以下消息
非静态方法Illuminate \ Html \ FormBuilder :: text()不应该静态调用,假设$ this来自不兼容的上下文
我无法弄清楚它是怎么回事,据我所知,这是与框架中的刀片相同的静态调用。
任何人都可以用这个方向指出我的写作方向吗?
答案 0 :(得分:1)
它不是一个静态方法,因为错误表明了。
尝试:
$form = new Form;
$html = $form->text('test');
但我不熟悉Laravel,或者Illuminate\Html\FormBuilder
,我不确定它是否有一个需要一些选项的构造函数。
答案 1 :(得分:1)
问题是您将FormBuilder
设为Form
。那只是正确的一半。因为Form
类是访问FormBuilder
的外观,如果要使用静态调用Form::text()
调用它,则需要使用实际外观。
这意味着只需删除
use Illuminate\Html\FormBuilder as Form;
如果您遇到“命名空间问题”,请添加此用法语句
use Illuminate\Support\Facades\Form;
或者,您也可以使用FormBuilder
$this->app
个实例
$form = $this->app['form'];
$html = $form->text();
答案 2 :(得分:0)
我已经弄清楚我在哪里出错了,我从Laravel的workbench目录运行phpunit。这并没有找到必要的课程,我试图改变我的班级以解决这个问题。我将我的测试存储在workbench / tests目录中,并将phpunit.xml指向它,但是从根Laravel项目目录运行它。我的班级现在看起来更简单了。谢谢你的帮助。
<?php
class FormBuilderTest extends TestCase {
function test_basic_input() {
$html = Form::text('text');
$this->assertContains('input', $html);
}
}