CakePHP单元测试控制器返回未定义的变量

时间:2014-03-31 22:28:25

标签: php cakephp phpunit

我是CakePHP的单元测试部分的新手。没有比现在更好的学习时间了。

我已准备好通过网络上的所有文档和大量教程。在完成一些更基本的单元测试时,我遇到了障碍。

我的控制器:

class TestsController extends AppController {

    public $components = array('RequestHandler', 'Security');

    public $helpers = array('Js');

    public $uses = array('Tests');

    public function beforeFilter() {
        $this->layout = 'admin';
        parent::beforeFilter();
    }

/**
 * Returns database values of all tests that have been created.
 *
 */
    public function index() {
        if ($this->request->is('requested')) {
            return $tests;
        }
        $this->paginate = array(
            'fields' => array('id', 'name', 'email', 'access_token', 'access_token_begins',
                'filesizelimit', 'related_files', 'access_token_expires'),
            'limit' => 10,
            'order' => array(
                'created' => 'desc'
        ));
        $this->set('tests', $this->paginate('Test'));
    }

我的控制器测试如下所示:

    class TestsControllerTest extends ControllerTestCase {

    public $fixtures = array('app.test');

    public function testIndex() {

        $result = $this->testAction('tests/index');
        debug($result);
    }
    }

我的测试结果是:

PHPUNIT_FRAMEWORK_ERROR_NOTICE
Undefined variable: tests
Test case: testsControllerTest(testIndex)

我收到的错误的唯一可行解决方案可能是测试控制器在实际运行testAction()之前需要进行身份验证吗?

这是CakePHP文档指南中的一个非常简单的示例,但我收到并且未定义变量错误。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我设法回答了我自己的问题。

由于控制器中的if语句,$tests变量未定义:

public function index() {
    if ($this->request->is('requested')) {
        return $tests;
    }
    $this->paginate = array(
        'fields' => array('id', 'name', 'email', 'access_token', 'access_token_begins',
            'filesizelimit', 'related_files', 'access_token_expires'),
        'limit' => 10,
        'order' => array(
            'created' => 'desc'
    ));
    $this->set('tests', $this->paginate('Test'));
}

运行应用程序时,该语句不会受到影响,但在运行测试时会发生这种情况。在这个给定的函数中,不需要IF语句,因此我的UNDEFINED VARIABLE错误现在已经解决了。