Phpunit给出未定义的变量项目错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phpunit给出未定义的变量项目错误相关的知识,希望对你有一定的参考价值。

我正在使用Laravel学习phpUnit并且遇到了错误。我一直在用Laracasts跟Laravel跟踪TDD,当我收到请求时我遇到了PHPunit错误。

我得到的错误是:

ErrorException:未定义的变量:project

C: XAMPP htdocs中 birdboardapp 存储框架视图 06b7a65ce168ffa601dc57bf60713aa232636d2f.php:7

我的测试用例是

  /** @test */
    public function a_user_can_view_a_project()
    {

        $this->withoutExceptionHandling();

        $project = $attributes = factory('AppProject')->create();

        $this->get('/projects/' . $project->id)
            ->assertSee($project->title)
            ->assertSee($project->description);
    }

我的路线/ web.php如下

 Route::get('/projects/{project}', 'ProjectsController@show');

ProjectsController是

public function show(){

    $project = Project::findOrFail(request('project'));

    return view('projects.show' ,compact($project));
}

和视图(项目目录中的show.blade.php)是

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
<h1>{{ $project->title }}</h1>
<div>{{ $project->description }}</div>
</body>
</html>

现在,当我尝试运行测试用例a_user_can_view_a_project时,它给出了一个错误,说“ErrorException:Undefined variable:project”

答案

在你的控制器show方法中,你似乎在调用compact($project),但这不是compact函数的工作方式。

compact接受变量名称,而不是变量本身。

见:https://www.php.net/manual/en/function.compact.php

解决方案是:

  1. 正确使用compact
public function show() {
  $project = Project::findOrFail(request('project'));

  return view('projects.show' , compact('project'));
}
  1. 根本不使用compact(推荐):
public function show() {
  $project = Project::findOrFail(request('project'));

  return view('projects.show' , [
    'project' => $project
  ]);
}

以上是关于Phpunit给出未定义的变量项目错误的主要内容,如果未能解决你的问题,请参考以下文章

当我使用标志覆盖率运行 Phpunit 时,出现错误:未定义的变量工厂

PHPUnit 错误“未定义的索引:HTTP_HOST”

PHPUNIT 给出 COLOR_AUTO 未定义的类常量

PHP - 私有类变量给出错误:未定义的变量

phpunit 命令在 laravel 项目上给出权限被拒绝错误

已定义但未用于整个项目的变量