功能测试 Laravel ViewComposer


Functional testing Laravel ViewComposer

我正在尝试使用标准设置在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 - 在服务提供商处注册

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

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

所以传递给 compose 方法的$view变量是空/空?谁能建议我可以做些什么来运行测试并继续使用视图编辑器功能?

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

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

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

$menuItems->some_prop
$another_var->some_prop

我会注释掉视图中的每个属性访问,并重新添加每个属性访问,直到错误再次发生。 确定哪个视图变量不是对象后,您可以调试测试环境未正确填充对象的原因。