功能测试Laravel ViewComposer

时间:2015-01-29 17:23:38

标签: php unit-testing laravel

我正在尝试使用标准设置在Laravel中测试控制器,这样可以正常工作。下面的测试通过了。

class ExampleTest extends TestCase {



/**
 * A basic functional test example.
 *
 * @return void
 */
public function testBasicExample()
{

    $crawler = $this->client->request('GET', '/');
    $this->assertTrue($this->client->getResponse()->isOk());
}

然而,一旦我介绍了一个ViewComposer - 注册了ServiceProvider

class MenuComposer {

const NONE = 0;
const READWRITE = 1;
const READONLY = 2;




/**
 * constructor largely for testing purposes
 * @param View $view
 * @param Auth $auth
 */
public function __construct()
{



}

public function compose($view)
{
    $access = $this->getAccessLevel();

    $view->with('menuItems',$this->menuItems($access));

}

生产代码按预期工作 - 但测试失败,因为它 ** ErrorException:尝试获取非对象的属性(查看:/srv/host_share/sds/app/views/hello.blade.php)  **

因此传递给compose方法的$ view变量为null / empty?任何人都可以建议我可以做什么来使测试运行并继续使用viewcomposer功能?

1 个答案:

答案 0 :(得分:1)

根据您的错误,Laravel告诉您“尝试获取非对象的属性”发生在以下刀片模板中

  

(查看:/srv/host_share/sds/app/views/hello.blade.php)

这可能意味着您将视图传递给变量(如menuItems),然后尝试获取该变量的属性

$menuItems->some_prop
$another_var->some_prop

我会在视图中注释掉每个属性访问权限,并将每个属性访问权限添加回去,直到错误重新出现。一旦你发现哪个视图变量不是一个对象,你可以调试测试环境没有用对象正确填充它的原因。