一人もくもく会 α verでサービス開始しました。
請求書作成システム α verでサービス開始しました。

CakePHP3のテスト時にBehaviorによるエラー

CakePHP3でテストをする際、突然大量のエラーが発生することがあった。 その直前にやったことといえばBehavior関連のテストの作り込み。

関連するテストが2箇所あるのだが、その両方を実行するとエラーになり、どちらかだけコメントアウトするとエラーが出ない。 両方が相互に絡み合ってエラーになっているらしい。

調べてみると、そのテストはファイル関連のbehaviorを使ったテストだったため、 behavior側にファイル操作関連の設定をできるようにしてテストを用意にしていた。 通常は呼ばれないのだがテスト用にだけ必要なメソッドを使っていた。

どうもテストが変わってもその設定が保持されてしまっているらしく、2回めに呼ばれたテストがエラーになってしまっていたらしい。 もちろんtearDownでモデルはunsetしている。それにもかかわらず。

どうもBehaviorはTable内に直接保存されているわけではないのでunsetだけでは他のテストに影響する状況が残ってしまうらしい。 テスト終了時に設定を元に戻す処理を実行するとエラーが出なくなった。

ちなみに、BehaviorはBehaviorRegistryに登録されており、 これはTableRegistryと同様ObjectRegistryを継承しているのでresetメソッドを使うことでも対応できそうな気がする。 (試してはいない)