【问题标题】:PHPUnit / Laravel static class to method generating errorPHPUnit / Laravel 静态类到方法生成错误
【发布时间】:2015-02-28 13:14:49
【问题描述】:

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

我无法弄清楚它发生了什么,据我所知,这是从框架中的刀片进行的相同静态调用。

谁能指出我写这个的方向吗?

【问题讨论】:

    标签: php laravel laravel-4 phpunit


    【解决方案1】:

    这不是错误所示的静态方法。

    试试:

    $form = new Form;
    
    $html = $form->text('test');
    

    但我不熟悉 Laravel 或 Illuminate\Html\FormBuilder,我不确定它是否有需要一些选项的构造函数..

    【讨论】:

      【解决方案2】:

      问题是您将FormBuilder 别名为Form。那只对了一半。因为Form类是访问FormBuilder的门面,如果你想用静态调用Form::text()调用它,你需要使用实际的门面。

      这意味着只需删除

      use Illuminate\Html\FormBuilder as Form;
      

      如果您遇到“命名空间问题”,请改为添加此 use 语句

      use Illuminate\Support\Facades\Form;
      

      您也可以使用$this->app 获取FormBuilder 实例

      $form = $this->app['form'];
      $html = $form->text();
      

      【讨论】:

        【解决方案3】:

        我已经弄清楚我哪里出了问题,我在 Laravel 的工作台目录中运行 phpunit。这没有参加必要的课程,我试图改变我的课程来解决这个问题。我将测试存储在 workbench/tests 目录中,并将 phpunit.xml 指向它,但从 Laravel 项目根目录运行它。我的课现在看起来简单多了。谢谢大家的帮助。

        <?php
        class FormBuilderTest extends TestCase {
            function test_basic_input() {
                $html = Form::text('text');
        
                $this->assertContains('input', $html);
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2016-05-13
          • 2019-12-02
          • 1970-01-01
          • 2012-05-24
          • 2015-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多