Я пытаюсь написать тест для модели, которая не имеет таблицы, но посылает по электронной почте, если данные проходят проверку в CakePHP 2.CakePHP модели 2 тестирования без таблицы с использованием макетом метода для электронной почты
Чтобы проверить I хочу утверждать, что некоторые данные проходят проверку и поэтому отправляют электронное письмо без фактической отправки. Для этого я пытаюсь создать метод mock для CakeEmail. Тем не менее, тест не удается, потому что $ useDbConfig уже быть не определен для фиктивного метода: -
Undefined property: Mock_MyModel_7a1fb8d0::$useDbConfig
Я предполагаю, что это проблема с моделью, не имея таблицу, но не может видеть, как решить ее.
Моя модель выглядит примерно так (за исключением правил проверки): -
<?php
App::uses('CakeEmail', 'Network/Email');
class MyModel extends AppModel {
public $useTable = false;
public function send($data) {
$this->set($data);
if ($this->validates() === false) {
return false;
} else {
$Email = $this->getEmailer();
$Email->from($data['MyModel']['email_from']);
$Email->to($data['MyModel']['email_to']);
$Email->subject($data['MyModel']['subject']);
$Email->send($data['MyModel']['message']);
}
return true;
}
public function getEmailer() {
return new CakeEmail();
}
}
Мой тест: -
<?php
class MyModel extends CakeTestCase {
public function setUp() {
parent::setUp();
$this->MyModel = ClassRegistry::init('MyModel');
}
public function testSend() {
$emailer = $this->getMock(
'CakeEmail',
array(
'to',
'emailFormat',
'subject',
'replyTo',
'from',
'template',
'viewVars',
'send'
)
);
$emailer->expects($this->any())->method('send')->will($this->returnValue(true));
$MyModel = $this->getMockForModel('MyModel', array('getEmailer'));
$MyModel->expects($this->once())->method('getEmailer')->will($this->returnValue($emailer));
$data = array(
'MyModel' => array(
'email_to' => '[email protected]',
'email_from' => '[email protected]',
'subject' => 'Foo bar',
'message' => ''
)
);
$result = $MyModel->send($data);
$this->assertTrue($result);
}
}
Любая помощь будет оценена. Это первый раз, когда я пытался/должен был издеваться над методом в Cake, используя тесты.
Является ли ваш класс тестов действительно «MyModel»? – ndm
@ndm спасибо, я чувствую себя действительно глупо сейчас. Разумеется, это должен быть MyModelTest, который решает мою проблему. Я смотрел этот код целую вечность, не могу поверить, что я пропустил это! – drmonkeyninja