【问题标题】:Testing methods and controllers with Laravel 5 [phpunit]使用 Laravel 5 [phpunit] 测试方法和控制器
【发布时间】:2015-03-27 23:05:24
【问题描述】:

我正在为我的项目做测试,谁能给我示范如何编写测试或给我一些好的视频课程来学习测试。

在我的示例中,我试图测试这部分:

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

这是我的项目控制器:

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。

【问题讨论】:

    标签: php unit-testing phpunit laravel-5


    【解决方案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'
    ]);
    

    【讨论】:

    • 如果用户更改,如何动态检查?
    • 如果用户是管理员,我需要检查表单是否存在,如果用户是工作人员,我需要检查字符串是否正常工作,如果用户不是身份验证,则检查是否重定向到 /
    • 您可以使用assertRedirectTo('/') 断言重定向。我不认为检查视图的实际内容是您应该做的事情,尽管您可以使用$response->getOriginalConten() 访问 html
    • @lukasgeiter 抱歉,也许你可以帮助解决我的assertViewHasAll 问题stackoverflow.com/questions/40138855/…
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2016-01-31
    • 2017-08-16
    • 2019-07-08
    • 2011-09-09
    • 2015-05-07
    • 2015-06-10
    • 2016-11-28
    相关资源
    最近更新 更多