使用Laravel 5 [phpunit]进行测试方法和控制器

3

我希望你能帮我翻译一下关于IT技术的内容。以下是需要翻译的内容:

我正在为我的项目编写测试,有人能给我展示如何编写测试的示例或者推荐一些好的视频课程来学习测试吗?

在我的示例中,我正在尝试测试这部分内容:

public function getProjectsForUser(){
        if(Auth::user() -> admin_id == NULL){
            $this->id = Auth::user() -> id;
        }else{
            $this->id = Auth::user() -> admin_id;
        }
        $projects = User::findOrFail(Auth::user() -> id)->projects()->where('admin_id', '=', $this->id)->get();

        $role = User::findOrFail(Auth::user() -> id)->roles;

        $users = User::where('admin_id', '=', $this->id)->lists('name','id');

        return array('projects' => $projects,'users' => $users,'roles' => $role );
}

这是我的模型Project.php

以下是我的PorojectController:

public function project(Project $projects){
            $this -> projects = $projects ->getProjectsForUser();
            return view('projects',$this -> projects);
        }

这是我的测试,用于检查用户是否已登录...

public function testHome()
        {
            $this->be(User::find(1));
            $response = $this->call('GET', '/projects');
            //CHECK IF AUTH USER
            $this->assertTrue($response->isOk());

    }

现在我需要检查数组中$project、$role和$users的值是否正确。
1个回答

1
你可以使用 assertViewHas() 来断言应该传递给视图的值。例如:
public function testHome(){
    $this->be(User::find(1));
    $response = $this->call('GET', '/projects');
    //CHECK IF AUTH USER
    $this->assertTrue($response->isOk());

    $this->assertViewHas('projects', 'expected value for projects');
    $this->assertViewHas('users', 'expected value for users');
    $this->assertViewHas('roles', 'expected value for roles');
}

顺便说一下:如果不传第二个参数,该方法只会断言变量存在,但不会比较其值。
使用稍微不同的语法来实现相同的效果,您可以使用assertViewHasAll()并将所有内容作为数组传递。
$this->assertViewHasAll([
    'projects' => 'expected value for projects',
    'users' => 'expected value for users',
    'roles' => 'expected value for roles'
]);

我该如何动态地检查用户是否已更改? - Vladimir Djukic
如果用户是管理员,我需要检查表单是否存在;如果用户是工人,我需要检查字符串“happy working”是否存在;如果用户未经授权,则需要检查是否重定向到/。 - Vladimir Djukic
你可以使用 assertRedirectTo('/') 来断言重定向。我认为检查视图的实际内容并不是你应该做的事情,尽管你可以通过 $response->getOriginalContent() 访问 HTML。 - lukasgeiter
@lukasgeiter 抱歉,也许你可以帮我解决assertViewHasAll的问题。http://stackoverflow.com/questions/40138855/laravel-5-2-phpunit-assertviewhasall-failed/40139033 - Dark Cyber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接