Cakephp 2.7でFlash->errorが呼ばれたかテストを書く

Cakephp 2.7のコントローラーのテストで、Flashコンポーネントへエラーメッセージがセットされるか確認するとき

$this->controller->Flash->expects($this->once())
    ->method('error')->with($this->equalTo('error occured'));

とするとエラーになります

Expectation failed for method name is equal to <string:error> when invoked 1 time(s).
Method was expected to be called 1 times, actually called 0 times.

呼ばれてないとかって言われます
これは、FlashComponentを見ると分かりますが、errorメソッドはなく、__callを使って呼び出されているからでした

PHP: オーバーロード __call – Manual

errorメソッドは用意されてなく、用意されてないメソッドが呼ばれた時には、__callが呼ばれる仕組みを利用したものでした
いい案が思いつかなかったのですが、テストをクリアするために

$this->controller->Flash->expects($this->once())
    ->method('__call')->with($this->equalTo('error'));

としてクリアさせました
__callが呼ばれて、errorが引数に渡るので、これでグリーンになりました
メッセージがテスト出来てませんが、まずはこれでいいかと思います

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください