イベントリスナーを使っているプラグインのテスト
binbin > イベントリスナーを使っているプラグインのテスト @ 2018/8/10 19:50 |
---|
プラグインHoge
ここにテストコードがあって、Hoge単体ならテストが通ります。 プラグインFuga ここにHogeに対するイベントリスナーがあって、Fugaを入れるとHogeのテストが通りません。 Fugaのdatasourceがない。というエラーが出る。 Fugaを入れてもテストが通るようにすると(Fixture追加)、Hoge単体でのテストが通らなくなります。 やっぱりFugaのdatasourceがない。 こういう場合って、どうするのが一般的なんでしょうか? 1, Test/Case/Model/HogeTest.phpの、Fixtureを切り替えできればテストが通りそうだと思ったんですが、切り替え方が分からない。 Fixture切り替えシステムを作るみたいな、果てしなく面倒そうな記事なら見つけましたが、そういうものなんでしょうか? 2, テストコードの中でイベントをdetachする これはbaserCMSの問題じゃないだろうなーと思っていたんですが、 Baser/Event/CakeEventManager.php の中に、detach という関数を見つけまして、これはそうなんじゃないかと思うのですが、使い方が分からない。 私の技量では何をやっているのか、読んでもよく理解できませんでした。 そして使っている箇所も見つけられない。 ggり疲れてやってまいりました。 なにかヒントでもありましたら、よろしくお願い致します。 |
tommy6073 > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/13 11:56 |
---|
こんにちは、tommy6073です。
引用: ここにHogeに対するイベントリスナーがあって、Fugaを入れるとHogeのテストが通りません。 参考にさせて頂きたいので、「datasourceがない」場合のそれぞれのエラーメッセージをそのまま貼り付けていただけないでしょうか? 引用: Fugaを入れてもテストが通るようにすると(Fixture追加)、Hoge単体でのテストが通らなくなります。 こちらはHogeのテストにFugaのFixtureを追加するとテストが通り、 その状態でFugaプラグインを外すとHogeのテストが通らなくなるということでよいでしょうか? 個人的にはHogeがFugaに依存しないようにするため、 テストを通すためのFixtureの切り替えやイベントのdetachは行わない方がいいように思います。 依存性が高いのであれば、プラグインをまとめてひとつにしてしまうという手段も考えられるのではないでしょうか。 |
binbin > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/13 17:04 |
---|
HogeとFuga、プラグインを両方入れてHogeのテストを動かした時に出るエラーです。
エラーのなかで、Hoge=Mcc, Fuga=MemberAdmin,それぞれこのようなプラグイン名です。 ほかにもプラグインが入っていて絡んでるんですが、FugaのFixtureを読み込めばエラーは消えます。
で、FugaのFixtureを読み込んだまま、Fugaを外してHogeだけにすると、それはそれでエラーになります。 さらにすいません、datasourceエラーではなかったです。 Plugin MemberAdmin could not be found. エラー: 内部エラーが発生しました。 普通にプラグインが無い。のエラーでした。 FugaはHogeに影響を与えるためのプラグインで、組み合わせた場合と、Hoge単体でも使用できる。 というのができないかと思って、一応できたんですが、テストが通らない。という問題にあたってしまいまして、投稿させていただきました。 こういう場合のうまいやり方などありましたら、お願い致します。 引用: テストを通すためのFixtureの切り替えやイベントのdetachは行わない方がいいように思います。 やっぱりですよね、共通ビヘイビアとかに逃して、プラグインはそれぞれ独立させるとか、考えてみたいと思います。うーん。 |
ryuring > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/16 12:25 |
---|
こんにちは。
情報を整理しないとわけがわからないので、一旦、整理させてください。 ここまで来ると手元の環境で再現させないと解決できなさそうです。 以下の内容で間違いないでしょうか? ■ Mcc(Hoge) ・単体だとテストが通る ■ MemberAdmin(Fuga) ・Mccに対するイベントリスナーがある ・これを入れるとMccのテストが通らなくなる (MISSINGTABLEEXCEPTION) ・Mccに、MemberAdminのFixtureを追加するとテストが通るが、Mcc単体でのテストが通らない (Plugin MemberAdmin could not be found.) Twitter:@ryuring |
binbin > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/17 14:57 |
---|
ryuring > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/21 15:22 |
---|
こんにちは、再現できました。
やはり、Mcc プラグインは、MemberAdmin プラグインに依存すべきではないので、Mcc単独で動作する事が望ましいと思います。 依存した前提のテストは、MemberAdmin 側に書くべきですね。 やり方としては、次の2パターンしかないと思います。 - baserCMSの管理画面からプラグインをオフにする。 - イベントをデタッチする。 また、イベントのデタッチが調べて見たところやり方が面倒くさいですね。 detachの第一引数をどっから持ってくるのかという。。。 取り急ぎ、デタッチが成功したのでコードを共有しておきます。 他の簡単なやり方がありましたら教えて下さい。
Hoge プラグイン、Fuga モデルの、afterFindイベントの $eventName の例としては、以下のようになります。
Twitter:@ryuring |
ryuring > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/21 15:29 |
---|
追記です。
BaserTestCase を継承したテストであれば、イベントを全てリセットするメソッドが利用できるようでした。
Twitter:@ryuring |
binbin > Re: イベントリスナーを使っているプラグインのテスト @ 2018/8/21 19:59 |
---|
こんな便利そうなモノがあったんですねー 調査不足でした。 次回以降、機会があったら使います。 ありがとうごうざいます。 (ぐぬう) |