【问题标题】:Output generated SQL query in CakePHP Unit Test在 CakePHP 单元测试中输出生成的 SQL 查询
【发布时间】:2013-08-19 02:57:25
【问题描述】:

我的单元测试非常简单。我的问题与其说是“测试/查询出了什么问题”,不如说是如何通过获取生成的 SQL 查询来解决 APP/test.php 中的这些问题。

以下是我的单元测试:

public function testMatchingPasswords() {
    debug($this->User->save($this->genericSaveData));
}

我收到以下错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'User.username' in 'where clause'

我了解问题,如果我能看到生成的 SQL 查询,我应该能够进一步解决问题并解决它。但是在 test.php 上它不显示生成的 SQL 查询。如何使 test.php 更详细,以便我可以看到正在生成的查询?

【问题讨论】:

  • 查询总是显示在底部。您的架构/夹具文件是什么?确定它包含用户名字段?
  • 出现异常时,$this->Model->save 的查询显然不会显示。问题不在于问题出在哪里,而在于为什么不存在查询,或者您如何输出查询。

标签: cakephp phpunit cakephp-2.0 cakephp-2.1


【解决方案1】:

看起来最好的办法是捕获 PDOException 并检查堆栈跟踪,因为这包括准备好的查询。

所以说您在使用$this->User->save($data) 时遇到问题,您可以这样做:

try {
    $this->User->save($data);
} catch (PDOException $e) {
    var_dump(array_slice($e->getTrace(), 0, 3));
}

_execute 调用应该相当接近顶部,生成的查询包含在args 中。

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多