-
-
Save chartjes/1510647 to your computer and use it in GitHub Desktop.
Here's my test: | |
<?php | |
include 'test_bootstrap.php'; | |
class FranchiseModelTest extends \PHPUnit_Extensions_Database_TestCase | |
{ | |
protected $_conn; | |
/** | |
* @return PHPUnit_Extensions_Database_DB_IDatabaseConnection | |
*/ | |
public function getConnection() | |
{ | |
return $this->createDefaultDbConnection( | |
$this->_conn, | |
'ibl_stats' | |
); | |
} | |
/** | |
* @return PHPUnit_Extensions_Database_DataSet_IDataSet | |
*/ | |
public function getDataSet() | |
{ | |
return $this->createFlatXmlDataSet( | |
'./fixtures/franchise-dataset.xml' | |
); | |
} | |
public function setUp() | |
{ | |
$this->_conn = new PDO( | |
'pgsql:host=localhost;dbname=ibl_stats', | |
'stats', | |
'st@ts=Fun' | |
); | |
} | |
public function tearDown() | |
{ | |
unset($this->_conn); | |
} | |
public function testIdOnlySetOnce() | |
{ | |
$franchise = new IBL\Franchise(); | |
$id = 25; | |
$franchise->setId($id); | |
$this->assertEquals($id, $franchise->getId()); | |
$anotherId = 26; | |
$franchise->setId($anotherId); | |
$this->assertEquals($id, $franchise->getId()); | |
} | |
public function testSaveUpdatesDatabase() | |
{ | |
$rowCount = $this | |
->getConnection() | |
->getRowCount('franchises'); | |
$this->assertEquals( | |
24, | |
$rowCount, | |
'Making sure we have 24 franchises' | |
); | |
$mapper = new IBL\FranchiseMapper($this->_conn); | |
$franchise = new IBL\Franchise(); | |
$franchise->setId(25); | |
$franchise->setNickname('TST'); | |
$franchise->setName('Test Team'); | |
$franchise->setConference('Conference'); | |
$franchise->setDivision('Division'); | |
$franchise->setIp(0); | |
$mapper->save($franchise); | |
// Update existing model | |
$franchise->setIp(35); | |
$mapper->save($franchise); | |
// Reload Franchise record and compare them | |
$franchise2 = $mapper->findById($franchise->getId()); | |
$this->assertEquals(35, $franchise2->getIp()); | |
// Make sure we have all the expected data in the table | |
$queryTable = $this | |
->getConnection() | |
->createQueryTable('franchises', 'SELECT * FROM franchises'); | |
$expectedTable = $this | |
->createFlatXmlDataSet('./fixtures/expected-franchises.xml') | |
->getTable('franchises'); | |
$this->assertTablesEqual( | |
$expectedTable, | |
$queryTable | |
); | |
// Clean up the franchise | |
$mapper->delete($franchise); | |
} | |
} | |
expected-franchises.xml is the same as franchise-dataset.xml except I added a record that matches what the test would have added to the database | |
Error message: | |
-> % phpunit FranchiseModelTest.php | |
PHPUnit 3.6.4 by Sebastian Bergmann. | |
.E | |
Time: 0 seconds, Memory: 6.50Mb | |
There was 1 error: | |
1) FranchiseModelTest::testSaveUpdatesDatabase | |
Argument 1 passed to PHPUnit_Extensions_Database_TestCase::assertTablesEqual() must implement interface PHPUnit_Extensions_Database_DataSet_ITable, null given, called in /Users/chartjes/Sites/local.ibl/tests/FranchiseModelTest.php on line 93 and defined | |
/usr/local/Cellar/php/5.3.8/lib/php/PHPUnit/Extensions/Database/TestCase.php:230 | |
/Users/chartjes/Sites/local.ibl/tests/FranchiseModelTest.php:93 | |
FAILURES! | |
Tests: 2, Assertions: 4, Errors: 1. |
Hrm, the return value is NULL. But the file is actually there...
chartjes@yggdrasil [10:30:26] [~/Sites/local.ibl/tests/fixtures] [master *]
-> % ls -la
total 816
drwxrwxr-x 8 chartjes staff 272 Dec 21 22:48 .
drwxrwxr-x 18 chartjes staff 612 Dec 22 10:29 ..
-rw-rw-r-- 1 chartjes staff 2667 Dec 21 22:48 expected-franchises.xml
-rw-rw-r-- 1 chartjes staff 2561 Dec 21 22:21 franchise-dataset.xml
-rw-rw-r-- 1 chartjes staff 4987 Dec 5 19:28 franchises.txt
-rw-rw-r-- 1 chartjes staff 13750 Dec 18 21:08 games-24.txt
-rw-rw-r-- 1 chartjes staff 373139 Nov 30 21:28 games.txt
-rw-rw-r-- 1 chartjes staff 4347 Dec 18 22:30 rotations-24.txt
Try an Xdebug trace to see what PHPUnit internals are doing? Maybe try using something like dirname(FILE) . './fixtures/expected-franchises.xml' to provide a full path instead of a relative one?
Have you run the XML file through a validator or linter? Are you positive the format is correct?
I tried using the dirname(FILE) thing and no difference.
When the XML file through xmllint and it reported no errors and the format is correct
expected-franchises.xml https://gist.github.com/1510736
franchises-dataset.xml https://gist.github.com/1510738
Files were generated via a CLI script
findAll(); echo "Creating XML out of Franchise records...\n"; $xmlDoc = new DOMDocument(); $root = $xmlDoc->appendChild( $xmlDoc->createElement('dataset') ); foreach ($allFranchises as $franchise) { $franchiseRow = $root->appendChild( $xmlDoc->createElement('franchise') ); $franchiseRow->appendChild( $xmlDoc->createAttribute('id') )->appendChild( $xmlDoc->createTextNode($franchise->getId()) ); $franchiseRow->appendChild( $xmlDoc->createAttribute('nickname') )->appendChild( $xmlDoc->createTextNode($franchise->getNickname()) ); $franchiseRow->appendChild( $xmlDoc->createAttribute('name') )->appendChild( $xmlDoc->createTextNode($franchise->getName()) ); $franchiseRow->appendChild( $xmlDoc->createAttribute('conference') )->appendChild( $xmlDoc->createTextNode($franchise->getConference()) ); $franchiseRow->appendChild( $xmlDoc->createAttribute('division') )->appendChild( $xmlDoc->createTextNode($franchise->getDivision()) ); $franchiseRow->appendChild( $xmlDoc->createAttribute('ip') )->appendChild( $xmlDoc->createTextNode($franchise->getIp()) ); } $xmlDoc->formatOutput = true; file_put_contents('./fixtures/franchise-dataset.xml', $xmlDoc->saveXml()); echo "Done\n"; and then I manually added the extra row to get the expected data setDarn. Then yeah, best I can suggest is tracing through the code to figure out why it's returning null, because it shouldn't be.
I'm guessing the createFlatXmlDataSet() call in the assignment for $expectedTable is returning null because it can't find the file? Try var_dump()ing the return value of that method call.