PHPUnit / Laravel静态类到方法生成错误

时间:2015-01-02 06:23:31

标签: php laravel laravel-4 phpunit

我在使用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来自不兼容的上下文

我无法弄清楚它是怎么回事,据我所知,这是与框架中的刀片相同的静态调用。

任何人都可以用这个方向指出我的写作方向吗?

3 个答案:

答案 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);
    }
}