smnhunt
136
2
Testing

Problem with assertRedirectedToRoute()

Posted 2 years ago by smnhunt

Hi,

I'm probably making a daft mistake but just don't seem to be able to get assertRedirectToRoute() to work in my tests - any help would be gratefully appreciated.

I have a controller function which returns a view with a form:

    public function create(School $school)
    {
        return view('form.create-teacher', [
            'school' => $school,
        ]);
    }

And the form action direct to this function:

    public function store(Request $request, School $school)
    {
        $this->validate($request, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => $request->password,
        ]);

        $teacher = Teacher::create();
        $teacher->attachToUser($user);
        $teacher->attachToSchool($school);

        return \Redirect::route('school.{school}.teacher.index', ['school' => $school->id]);
    }

The test that I am running is as follows:

    public function a_school_admin_can_add_a_teacher_to_their_school()
    {
        // Given: A school exists and I visit the create teacher page.
        $school = factory(App\Base\Academy\School::class, 1)->create();
        $this->visit('school/1/teacher/create');

        // When: The teacher is registered.
        $this->type('Mr Smith', 'name')
             ->type('[email protected]', 'email')
             ->type('password', 'password')
             ->type('password', 'password_confirmation')
             ->press('Register');

        // Then: The changes are reflected in the database.
        $this->seeInDatabase('users', ['name' => 'Mr Smith']);
        $this->seeInDatabase('teachers', ['user_id' => 1, 'school_id' => 1]);
        $this->assertRedirectedToRoute('school.{school}.teacher.index', ['school' => 1]);
    }

And the error that I am receiving is as follows:

PHPUnit 4.8.27 by Sebastian Bergmann and contributors.

.F

Time: 179 ms, Memory: 16.00MB

There was 1 failure:

1) SchoolAdminTest::a_school_admin_can_add_a_teacher_to_their_school
Failed asserting that Illuminate\Http\Response Object (...) is an instance of class "Illuminate\Http\RedirectResponse".

/home/simon/Code/cpactracker.co.uk/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:724
/home/simon/Code/cpactracker.co.uk/vendor/laravel/framework/src/Illuminate/Foundation/Testing/Concerns/MakesHttpRequests.php:743
/home/simon/Code/cpactracker.co.uk/tests/Acceptance/SchoolAdmin/SchoolAdminTest.php:54

FAILURES!
Tests: 2, Assertions: 10, Failures: 1.

It seems as though all other parts of the test are working except for the assertRedirectedToRoute part.

Please sign in or create an account to participate in this conversation.

Reply to

Use Markdown with GitHub-flavored code blocks.