作成中に、使用可能なプロパティOwnableBehavior
を使用することにしました。呼び出された$mapMethods
メソッドをマップすることです(これに関するドキュメントのリンクはここにあります)isOwnedByXXX()
isOwnedBy()
これが私のOwnableBehavior
コードです:
class OwnableBehavior extends Model Behavior {
public $mapMethods = array('/isOwnedBy(\w+)/' => 'isOwnedBy');
public function isOwnedBy(Model $model, $type, $id, Model $userModel, $userId) {
// Method is currently empty
}
}
TestCaseコードは次のとおりです。
class OwnableBehaviorTest extends CakeTestCase {
public function testIsOwned() {
$TestModel = new Avatar();
$TestModel->Behaviors->attach('Ownable');
$result = $TestModel->Behaviors->Ownable->isOwnedByUser(
$TestModel, 1, new User(), 1);
$this->assertTrue($result);
}
}
テストを実行すると、次のエラーが発生します。
Call to undefined method OwnableBehavior::isOwnedByUser()
メソッド呼び出しをisOwnedBy($TestModel, 'user', 1, new User(), 1);
これに変更すると、動作するので、何らかの理由で、単体テスト中にマップされたメソッドが動作していないように見えます。コントローラーでマップされたメソッドをテストしましたが、エラーは発生しません。
動作をモデルにロードする方法にかかっているのではないかと思いました。コンポーネントやヘルパーなどの動作を適切にテストする方法についてのドキュメントがクックブックに見つかりませんでした。そのため、コア動作テストで使用するのと同じ手法を使用しました(にありますCake/Test/Case/Model/Behavior/
)。
メソッドを上書きしていることが原因かもしれないと思いましたが、セットアップメソッドの最初にModelBehavior::setup()
追加しようとしましたが、それでも同じエラーが発生します。parent::setup($model, $settings)
私は他のModelBehavior
方法を上書きしていません。
このメソッドを使用することもできるOwnableBehavior::isOwnedBy()
と思いますが、単体テスト中にマップされたメソッドを機能させることができるかどうかを知りたいと思います。