在Laravel中测试重定向功能

时间:2017-08-14 13:04:09

标签: php laravel unit-testing phpunit

场景:

我有以下测试用例我想测试场景,如果用户找到了usertype superadmin 然后将用户重定向到 / home 路由,如果用户找不到重定向他去 / superadmin / setup 路线。尝试了多个approch但无法弄清楚。怎么能通过这个测试?

我正在使用Laravel 5.4。

测试用例:

<?php

namespace Tests\Feature;

use App\User;
use Tests\TestCase;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class SuperAdminRegistrationTest extends TestCase
{
    use DatabaseMigrations;

    public function testRegistrationForm()
    {
        factory(User::class)->create(['usertype' => 'superadmin']);
        $user = User::getUserFromUsertype('superadmin');
        //If valid user is found with usertype 'superadmin' then
            // $this->get('/home');
            // $this->assertStatus(200);
        //Else user not found with given usertype then
           // $this->get('/superadmin/setup');
           // $this->assertStatus(200);
    }
}

3 个答案:

答案 0 :(得分:1)

$this->assertRedirectedTo($uri, $with = []);

也许尝试类似的东西

此PHPUnit方法将断言您是否已被重定向到您在参数中提供的$ uri。

https://laravel.com/docs/5.4/testing

您可以在官方laravel文档中阅读更多相关内容以进行测试

答案 1 :(得分:1)

根据经验,请勿在测试方法中使用if else语句。由于您要测试所有可能的情况,因此if语句仅选择一种情况。

根据经验,我建议您使用以下两种测试方法:

public function testSuperAdminCanViewRegistrationForm()
{
    factory(User::class)->create(['usertype' => 'superadmin']);
    $user = User::getUserFromUsertype('superadmin');

    $this->actingAs($user);

    $response = $this->get('/home');
    $response->assertStatus(200);
}

public function testNonSuperAdminCanViewRegistrationForm()
{
    factory(User::class)->create(['usertype' => 'non_superadmin']);
    $user = User::getUserFromUsertype('non_superadmin');

    $this->actingAs($user);

    $response = $this->get('/home');
    $response->assertStatus(302);
    $response->assertRedirect('/superadmin/setup');
}

注意:我在Laravel ^ 6.0工作

答案 2 :(得分:0)

创建不属于superadmin类型的第二个用户。确保将它们重定向到/ superadmin / setup。