Auth

假設需要登入才可以發表文章,就要加入認證用的 middleware :

  • 直接在 Controller 的 contructor 中用 $this->middleware('auth') 來定義。
  • routes.php 上定義 ['middleware' => 'auth']
    public function __construct(ArticleRepository $repository)
    {
        // 除了列表頁外,其他 action 都加入驗證機制
        // 參考 App\Http\Kernel.php 裡的 $routeMiddleware
        $this->middleware('auth', ['except' => 'index']);

        $this->repository = $repository;
    }

再次執行測試會失敗,因為我們沒有認證成功。

Laravel 提供以下方式來模擬已經通過身份驗證:

$this->be(new User(['email' => '[email protected]']));

把它放在 TestCase 類別中方便呼叫:

    protected function userLoggedIn()
    {
        $this->be(new User(['email' => '[email protected]']));
    }

修正測試:

    public function testCreateArticleSuccess()
    {
        // 把 Session::start 移到 setUp

        // 模擬使用者已登入
        $this->userLoggedIn();

        // 以下不變
        // ...
    }

    public function testCreateArticleFails()
    {
        // 把 Session::start 移到 setUp

        // 模擬使用者已登入
        $this->userLoggedIn();

        // 以下不變
        // ...
    }

如果使用者沒登入,可以用以下方法模擬:

    public function testAuthFailed()
    {
        $this->call('POST', 'articles', [
            '_token' => csrf_token(),
        ]);
        $this->assertRedirectedTo('auth/login');
    }

results matching ""

    No results matching ""