php - Error when using phpunit/dbunit with SQL Server -
i using phpunit/dbunit test sql server database, shows following error
1) tests\integration\blocksdaointegrationtest::test_insert_block phpunit_extensions_database_operation_exception: composite[truncate] operation failed on query: truncate table digital_documents_images using args: array ( ) [sqlstate[42000]: [microsoft][sql server native client 11.0][sql server]cannot truncate table 'digital_documents_images' because being referenced foreign key constraint.]
could please me solve it? thank you
(sorry english i'm brazilian)
i have solved problem extending class phpunit_extensions_database_operation_truncate , returning it:
the operation class:
class sqlservertruncateoperation extends \phpunit_extensions_database_operation_truncate { private $reseed = "declare @sql nvarchar(max); set @sql = n'set nocount on;'; ;with s(t) ( select quotename(object_schema_name(referenced_object_id)) + '.' + quotename(object_name(referenced_object_id)) sys.foreign_keys k exists ( select 1 sys.identity_columns [object_id] = k.referenced_object_id ) group referenced_object_id ) select @sql = @sql + n'dbcc checkident(''' + t + ''', reseed, 0) no_infomsgs;' s; exec sp_executesql @sql;"; public function execute(\phpunit_extensions_database_db_idatabaseconnection $connection, \phpunit_extensions_database_dataset_idataset $dataset) { $connection->getconnection()->query('exec sp_msforeachtable "alter table ? nocheck constraint all"'); $connection->getconnection()->query('exec sp_msforeachtable "delete ?"'); $connection->getconnection()->query($this->reseed); $connection->getconnection()->query('exec sp_msforeachtable "alter table ? check check constraint all"'); } }
my test base class:
abstract class dbunitabstracttestcase extends \phpunit_extensions_database_testcase{ static private $pdo = null; private $conn = null; protected function getconnection() { if ($this->conn === null) { if (self::$pdo == null) { self::$pdo = new \pdo("sqlsrv:server=server;database=db", "user", 'password'); } $this->conn = $this->createdefaultdbconnection(self::$pdo, 'database'); } return $this->conn; } public function getsetupoperation() { $cascadetruncates = true; return new \phpunit_extensions_database_operation_composite(array( new sqlservertruncateoperation($cascadetruncates), \phpunit_extensions_database_operation_factory::insert() )); } }
Comments
Post a Comment