CakePHPで最低限書いた方がいいModelTestの3点セット
はじめに
普段、業務でCakePHPを書いていてコードレビューいただいた際に、modelのテストについて勉強になる知見をいただきました。
CakePHPでは、1テーブル1Modelを作りますが、Modelによっては何もメソッドを書かないものもあると思います。
そんなときに書いた方がいいテストについて知見をここに残します。
概要
CakePHPのModelでは、メソッド以外にValidationやAssociationなどのプログラムを動作させるための設定を行います。
裏を返せば、正しく設定できていない場合は思っている通りに動作してくれません。
そのため、「正しく設定されているかどうか」をテストするために以下の3つのテストを書きたいと思います。
- Associationが正しく設定されているか
- Behaviorが正しく読み込まれているか
- Validationルールが正しく設定されているか
以降、3つのテストを書いていきます。
環境
CakePHP2.10系です。
Associationが正しく設定されているか
Associationが設定されていない場合
public function testAssociation()
{
$actual = $this->Model->getAssociated();
$this->assertSame($expected, []);
}
Associationが設定されている場合
public function testAssociation()
{
$actual = $this->Model->getAssociated();
$this->assertSame($expected, [
'OtherModel1' => 'belongsTo',
'OtherModel2' => 'belongsTo',
]);
}
Behaviorが正しく読み込まれているか
$this->Model->Behaviors->loaded()
でそのModelが読み込んでいるBehaviorの一覧を取得することができます。
public function testLoadedBehaviors()
{
$expected = [
'Sample'
];
$actual = $this->Model->Behaviors->loaded();
$this->assertSame($expected, $actual);
}
Behavior読み込み時にoptionを指定している場合、上記のテストに追加します。
BehaviorCollectionに定義されている$settings
にて、Behaviorに渡しているoptionにアクセスすることができます。
$settings
が期待されたものかどうかassertします。
public function testLoadedBehaviors()
{
// 上記コード
// SampleBehaviorに渡している設定が正しいか
$expected = [
'Model' => [
'option1' => 'option1',
]
];
$actual = $this->Model->Behaviors->Sample->settings;
$this->assertSame($expected, $actual['Model']);
Validationルールが正しく設定されているか
validationルールである$validate
はpublicなので、 $this->Model->validate
でアクセスできます。
public function testValidationRule()
{
$expected = [
'field1' => [
'rule1' => [
'rule' => ['rule1']),
'message' => 'message',
'required' => true,
)
),
);
$actual = $this->Model->validate;
$this->assertSame($expected, $actual);
}
最後に
フレームワークを利用する場合は上記のような期待している設定になっているかをテストすることは、期待した動作をするかを確認する上で有効なテストになると思います。
以上
Author And Source
この問題について(CakePHPで最低限書いた方がいいModelTestの3点セット), 我々は、より多くの情報をここで見つけました https://qiita.com/hgsgtk/items/624dbe97b891f0e00d4e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .