-
-
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.