PHPSpec: Issue stubbing out PDO::execute



我在使用PHPSpec和预言来存根PDO::execute时遇到了一个问题,但我一直得到一个错误:

29  ! it should perform PDO queries
  method `DoublePDOP3::execute()` is not defined.
   0 vendor/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php:48
     throw new ProphecyExceptionDoublerMethodNotFoundException("Method `DoublePDOP3::ex"...)
   1 vendor/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php:242
     ProphecyProphecyMethodProphecy->__construct([obj:ProphecyProphecyObjectProphecy], "execute", [obj:ProphecyArgumentArgumentsWildcard])
   2 [internal]
     ProphecyProphecyObjectProphecy->__call("execute", [array:1])
   3 [internal]
     specDevtoolsMysqlModelSpec->it_should_perform_PDO_queries([obj:PhpSpecWrapperCollaborator])

这是我的规格:

class MysqlModelSpec extends ObjectBehavior
{
    function let(PDO $connection)
    {
        $this->beConstructedWith($connection);
    }
    function it_should_perform_PDO_queries(PDO $connection)
    {
        $connection->prepare(
            "SELECT :key FROM :collection WHERE :where"
        )->willReturn(true);
        $connection->execute(
            array(
                'key' => 'user_name',
                'collection' => 'users',
                'where' => 'userid=1'
            )
        )->willReturn(true);
        $this->get('user_name', 'users', 'userid=1')
            ->shouldReturn(
                array('user_name' => 'seagoj')
            );
    }
}

我知道预言不存根任何不存在的方法,但PDO被烤到PHP和PDO::准备存根工作得很好。谢谢你的帮助。

如果这只是在底层调用PDO,那么它就没有正确使用PDO。

核心PDO对象没有execute()方法。这纯粹是准备好的语句,也就是->prepare()返回的。有 ->exec()立即执行查询,但不支持准备语句。

基本序列是

$stmt = $pdo->prepare('...');
$stmt->execute(...);

相关内容

  • 没有找到相关文章

最新更新