我有以下测试用例我想测试场景,如果用户找到了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);
}
}
答案 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。