CakePHP 2测试模型,无表,使用电子邮件模拟方法

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 我假设这是模型没有表的问题,但看不到如何解决它 我的模型看起来像(不包括验

我试图为一个模型编写一个测试,该模型没有表,但如果数据通过CakePHP 2中的验证,就会发送一封电子邮件

为了进行测试,我想断言一些数据通过了验证,因此会发送一封电子邮件而不实际发送一封。为此,我尝试为CakeEmail创建一个模拟方法。但是,测试失败,因为尚未为mock方法定义$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);

    }

}