【问题标题】:Test redirection functionality in Laravel在 Laravel 中测试重定向功能
【发布时间】:2018-01-22 07:56:56
【问题描述】:

场景:

我有以下测试用例,我想在其中测试场景,如果用户找到用户类型 superadmin 然后将用户重定向到 /home 路由,如果用户未找到重定向他到 /superadmin/setup 路线。尝试了多种方法,但无法弄清楚。怎样才能通过这个测试?

我正在使用 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);
    }
}

【问题讨论】:

    标签: php laravel unit-testing phpunit


    【解决方案1】:
    $this->assertRedirectedTo($uri, $with = []);
    

    也许可以尝试类似的方法

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

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

    您可以在 laravel 官方测试文档中阅读更多相关信息

    【讨论】:

    • 虽然您的代码可能在技术上回答了问题,但您可能希望包含一些关于它为何有帮助的解释。
    【解决方案2】:

    根据经验,不要在测试方法中使用 if else 语句。由于您想测试所有可能的情况,但 if else 语句只选择一种情况。

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

    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

    【讨论】:

      【解决方案3】:

      创建不是超级管理员类型的第二个用户。确保他们被重定向到 /superadmin/setup。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        • 2019-07-01
        相关资源
        最近更新 更多