Vladimir Djukic
Vladimir Djukic

Reputation: 2072

Testing methods and controllers with Laravel 5 [phpunit]

I am tring to make test for my project, could someone show me example how to write tests or give me some good video course to learn testing.

In my example I am tring to test this part:

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

It was my model Project.php

Here is my PorojectController:

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

Here is my test to check if user logged...

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

    }

Now I need to check if I get right values inside array, for $project, $role, $users.

Upvotes: 3

Views: 1610

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152870

You can use assertViewHas() to assert values that should have been passed to the view. For example:

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

By the way: If you pass no second argument the method will just assert that the variable exists but won't compare the value.

To accomplish the same with a bit a different syntax you can use assertViewHasAll() and pass everything as array:

$this->assertViewHasAll([
    'projects' => 'expected value for projects',
    'users' => 'expected value for users',
    'roles' => 'expected value for roles'
]);

Upvotes: 1

Related Questions