代码之家  ›  专栏  ›  技术社区  ›  rook99

如何测试路由中间件?

  •  1
  • rook99  · 技术社区  · 4 年前

    假设我有一组受中间件保护的路由:

    Route::group(['middleware' => 'verified'], function () {
        Route::get('/profile', 'ProfileController@show')->name('profile.show');
        Route::get('/settings', 'SettingsController@show')->name('settings.show');
    });
    

    我如何测试这些路由是否受到保护 verified 中间件?如果我编写这些测试,它们是被视为功能测试还是单元测试?

    0 回复  |  直到 4 年前
        1
  •  1
  •   NevNein    4 年前

    中间件测试高度依赖于中间件本身的逻辑和可能的结果。我们走吧 verified 您引用的中间件示例:

    如果用户未验证其电子邮件,我们希望用户被重定向(302)到“验证您的电子邮件”页面( email_verified_at 属性为null),否则我们期望正常响应(200)。

    我们如何模拟用户访问我们的页面?随着 actingAs 方法。从 docs :

    这个 行动A 助手方法提供了一种简单的方法来验证给定用户是否为当前用户。

    所以我们的代码看起来像这样:

    use App\User;
    
    class ExampleTest extends TestCase
    {
        public function testAccessWithoutVerification()
        {
            // Create a dummy user
            $user = factory(User::class)->create();
    
            // Try to access the page
            $response = $this->actingAs($user)
                             ->get('/the-page-we-want-to-test');
    
            // Assert the expected response status
            $response->assertStatus(302);
        }
    
        public function testAccessWithVerification()
        {
            // Create a dummy user, but this time we set the email_verified_at
            $user = factory(User::class)->create([
                'email_verified_at' => \Carbon\Carbon::now(),
            ]);
    
            // Try to access the page
            $response = $this->actingAs($user)
                             ->get('/the-page-we-want-to-test');
    
            // Assert the expected response status
            $response->assertStatus(200);
        }
    
    }
    

    文档有一个 entire page dedicated to HTTP tests ,看看。