CakePHP 2测试模型,无表,使用电子邮件模拟方法
我试图为一个模型编写一个测试,该模型没有表,但如果数据通过CakePHP 2中的验证,就会发送一封电子邮件 为了进行测试,我想断言一些数据通过了验证,因此会发送一封电子邮件而不实际发送一封。为此,我尝试为CakeEmail创建一个模拟方法。但是,测试失败,因为尚未为mock方法定义$useDbConfig:-CakePHP 2测试模型,无表,使用电子邮件模拟方法,php,unit-testing,cakephp,cakeemail,cakephp-2.6,Php,Unit Testing,Cakephp,Cakeemail,Cakephp 2.6,我试图为一个模型编写一个测试,该模型没有表,但如果数据通过CakePHP 2中的验证,就会发送一封电子邮件 为了进行测试,我想断言一些数据通过了验证,因此会发送一封电子邮件而不实际发送一封。为此,我尝试为CakeEmail创建一个模拟方法。但是,测试失败,因为尚未为mock方法定义$useDbConfig:- Undefined property: Mock_MyModel_7a1fb8d0::$useDbConfig 我假设这是模型没有表的问题,但看不到如何解决它 我的模型看起来像(不包括验
Undefined property: Mock_MyModel_7a1fb8d0::$useDbConfig
我假设这是模型没有表的问题,但看不到如何解决它
我的模型看起来像(不包括验证规则):-
类名应该是MyModelTest
而不是MyModel
。CakePHP的命名约定需要遵守。您的测试用例类真的被称为MyModel
?@ndm谢谢,我现在觉得自己很愚蠢。当然,解决我的问题的应该是MyModelTest。我已经看这个代码很久了,真不敢相信我错过了!
<?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' => 'foo@example.com',
'email_from' => 'bar@example.com',
'subject' => 'Foo bar',
'message' => ''
)
);
$result = $MyModel->send($data);
$this->assertTrue($result);
}
}