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

时间:2019-05-01 01:11:44

标签: php laravel phpunit

我正在用Laravel学习PHPUnit,并且陷入了错误。 我一直在与Laracasts的Laravel一起跟踪TDD,并且在我执行get请求时遇到PHPunit错误。

得到的错误是:

ErrorException:未定义的变量:project

C:\ xampp \ htdocs \ birdboardapp \ storage \ framework \ views \ 06b7a65ce168ffa601dc57bf60713aa232636d2f.php:7

我的测试用例是

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

        $this->withoutExceptionHandling();

        $project = $attributes = factory('App\Project')->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));
}

和视图(projects目录中的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:未定义的变量:项目”

1 个答案:

答案 0 :(得分:2)

在控制器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
  ]);
}