I found a much better solution for this thanks to this blog post .
I created a function that makes it easy to claim that my two datasets are equal.
protected function assertDataSetEquals( $ExpectedXMLFileName, array $options = array()) { $model = (isset($options['model'])) ? $options['model'] : $this->_object; $excludeColumns = (isset($options['excludeColumns'])) ? $options['excludeColumns'] : null; $ds = new Zend_Test_PHPUnit_Db_DataSet_DbTableDataSet(); $ds->addTable($model); $dsFiltered = (isset($excludeColumns)) ? $this->filterColumns($model, $ds, $excludeColumns) : $ds; $this->assertDataSetsEqual( $this->createFlatXmlDataSet( APPLICATION_PATH . '/../tests/fixtures/models/' . $ExpectedXMLFileName . '.xml' ), $dsFiltered ); }
And a private function to return a filtered dataset.
private function filterColumns( $model, $dataSet, $excludeColumns) { $dsFiltered = new PHPUnit_Extensions_Database_DataSet_DataSetFilter($dataSet); $dsFiltered->setExcludeColumnsForTable( $model->getName(), $excludeColumns ); return $dsFiltered; }
Now, to compare two datasets, excluding any columns, I just do it.
$this->assertDataSetEquals( 'TableWithTimestampIWantToIgnoreUpdate', array('excludeColumns'=>array('timestamp','id')) );
This simplifies and simplifies the testing of models matching tables with a timestamp column.
source share