Featured image of post Laravel 測試跟隨 Redirect:用 followingRedirects() 驗證最終頁面

Laravel 測試跟隨 Redirect:用 followingRedirects() 驗證最終頁面

POST 後只拿到 302 看不到最終頁面,用 followingRedirects() 自動跟隨轉址,直接對目標頁面做 assertion,並說明與舊版的差異。

情境

Controller 建完資料後做了 redirect:

1
2
3
4
5
6
7
class UserController extends Controller {
    public function create(Request $request) {
        $user = User::create($request->all());

        return redirect(uri('users.show', ['id' => $user->id]));
    }
}

寫測試時想驗證轉址後的頁面內容,但 $this->post(...) 只會拿到 302 response,看不到最終頁面。

解法

加上 followingRedirects() 讓測試自動跟隨轉址:

Laravel >= 5.5.19

1
2
3
4
5
6
7
8
9
class UserControllerTest extends TestCase {
    public function test_it_should_show_user_after_create_user() {
        $this
            ->followingRedirects()
            ->post('user', [
                'name' => 'foo'
            ]);
    }
}

Laravel < 5.4.12

舊版的方法名稱少一個 ing

1
$this->followRedirects()->post('user', ['name' => 'foo']);

參考資源