cakephp3のFlashメッセージのテストが上手くいかなければ、IntegrationTestCase::enableRetainFlashMessages()を試してみるのもいいかもしれない

コントローラでそのユーザが存在しない場合、以下のような Flashメッセージを書いていた。

$this->Flash->error('Invalid user');

それをテストするため

$this->assertSession('Invalid user', 'Flash.flash.0.message');

というテストを書いたんだけど null が返ってきていてテストがコケた。

少し調べていると IntegrationTestCase::enableRetainFlashMessages() というものを知る。

github.com

docを見る限り、FlashHelper によって取り除かれたあとに Flashメッセージをテスト用のセッションにリストアしてくれるメソッドのようだ。

ということで、以下のように書くと思ったように動いた。

$this->enableRetainFlashMessages();
// $this->get('/users/view/-1');
$this->assertSession('Invalid user', 'Flash.flash.0.message');