2013-10-19 29 views
0

试图单元测试我的服务模型,这些模型被我的处理实体的flush命令散布为Doctrine。我得到的错误是我的新模仿对象没有被持久化,并且一个关系没有新实体的级联选项。Doctrine和ZF2 - 单元测试忽略flush()和非持久性模拟对象

看到这个我意识到我也不希望我的flush()操作去数据库,因为他们只是对新实体进行单元测试。

我该怎么做才能让Doctrine忽略模拟对象并忽略flush操作?

现在,我得到这个错误:Fatal error: Command failed: PHP Fatal error: Call to a member function bindValue() on a non-object in /Users/person/Sites/project/vendor/doctrine/dbal/lib/Doctrine/DBAL/Connection.php on line 1311有:

// Nullify EM 
    $sm->setAllowOverride(true); 
    $sm->setFactory('Doctrine\ORM\EntityManager', function ($sm) { 

     $eventManager = null; 
     $metadataCache = new \Doctrine\Common\Cache\ArrayCache; 
     $paths = $sm->get('Config')['doctrine']['driver']['application_entities']['paths']; 

     $config = new \Doctrine\ORM\Configuration(); 
     $config->setMetadataCacheImpl($metadataCache); 
     $config->setMetadataDriverImpl($config->newDefaultAnnotationDriver($paths, false)); 
     $config->setQueryCacheImpl(new \Doctrine\Common\Cache\ArrayCache); 
     $config->setProxyDir(__DIR__ . '/Proxies'); 
     $config->setProxyNamespace('Doctrine\Tests\Proxies'); 

     $conn = array(
      'driverClass' => 'Doctrine\Tests\Mocks\DriverMock', 
      'wrapperClass' => 'Doctrine\Tests\Mocks\ConnectionMock', 
      'user'   => 'john', 
      'password'  => 'wayne' 
     ); 

     $conn = \Doctrine\DBAL\DriverManager::getConnection($conn, $config, $eventManager); 

     return \Doctrine\Tests\Mocks\EntityManagerMock::create($conn, $config, $eventManager); 

}); 

我一半通过改变主义的测试代码修复以上,但是这是不允许的。 我试着创建一个模拟的EntityManager存储在我的ServiceManager与模拟刷新,但EntityManager是一个单身人士,所以无论如何返回一个新的实例。关于单元测试消费主义的服务绝对没有任何信息,所以在这一点上,我只能假设它实际上是不可能的。

+0

我只想用一个测试数据库,看看这里:https://github.com/RichardKnop/zend-v2-skeleton/blob /master/tests/module/Admin/src/Admin/Entity/AdminSessionTest.php –

回答