Я работаю над проектом SilverStripe. Сейчас я пытаюсь написать модульные и функциональные тесты для своего приложения. В моем тесте я заполняю страницы в базе данных, используя файлы фикстуры. Когда я попытался заполнить объект для класса Page, который был встроен в проект SilverStripe, это было нормально. Ниже приведен мой код.
class PageTest extends \SilverStripe\Dev\FunctionalTest
{
protected static $fixture_file = 'fixtures.yml';
public function testMyMethod()
{
$expectedURLs = [
'new_page' => 'testing1',
'old_page' => 'testing2',
];
foreach ($expectedURLs as $fixture => $urlSegment) {
$obj = $this->objFromFixture('Page', $fixture);
$this->assertEquals($urlSegment, $obj->URLSegment);
}
}
}
Это мой файл фикстуры.
Page:
new_page:
Title: New Page 1
Heading: Wellington
PublishedDate: 2015-12-12 00:00:01
ShowInFooterUsefulLinks: true
PageTheme: Default
URLSegment: testing1
old_page:
Title: Old Page 1
Heading: Wellington 1
PublishedDate: 2015-12-12 00:00:01
ShowInFooterUsefulLinks: true
PageTheme: Default
URLSegment: testing2
Вышеприведенный тест работает, как и ожидалось.
В моем тесте я хотел вместо этого используйте класс EventPage. У меня есть класс с именем EventPage class, который расширяется от класса Page. Эта таблица класса EventPage имеет дополнительное поле с именем EventDate. Так что я изменил свой файл фикстуры на следующий.
EventPage:
new_page:
Title: New Page 1
Heading: Wellington
PublishedDate: 2015-12-12 00:00:01
ShowInFooterUsefulLinks: true
PageTheme: Default
URLSegment: testing1
EventDate: 2015-12-12 00:00:01
old_page:
Title: Old Page 1
Heading: Wellington 1
PublishedDate: 2015-12-12 00:00:01
ShowInFooterUsefulLinks: true
PageTheme: Default
URLSegment: testing2
EventDate: 2015-12-12 00:00:01
На этот раз я использую класс EventPage.
Я также изменил свой тестовый класс на этот
class PageTest extends \SilverStripe\Dev\FunctionalTest
{
protected static $fixture_file = 'fixtures.yml';
public function testMyMethod()
{
$expectedURLs = [
'new_page' => 'testing1',
'old_page' => 'testing2',
];
foreach ($expectedURLs as $fixture => $urlSegment) {
$obj = $this->objFromFixture('EventPage', $fixture);
$this->assertEquals($urlSegment, $obj->URLSegment);
}
}
}
Когда я запускаю тест, я получаю следующую ошибку.
Fatal error: Couldn't find object 'new_page' (class: EventPage) in /var/www/vendor/silverstripe/framework/src/Dev/SapphireTest.php on line 505
Call Stack:
0.0013 349392 1. {main}() /var/www/vendor/phpunit/phpunit/phpunit:0
0.1998 520368 2. PHPUnit_TextUI_Command::main() /var/www/vendor/phpunit/phpunit/phpunit:52
0.1999 520480 3. PHPUnit_TextUI_Command->run() /var/www/vendor/phpunit/phpunit/src/TextUI/Command.php:116
0.4674 1128776 4. PHPUnit_TextUI_TestRunner->doRun() /var/www/vendor/phpunit/phpunit/src/TextUI/Command.php:186
0.5089 1210224 5. PHPUnit_Framework_TestSuite->run() /var/www/vendor/phpunit/phpunit/src/TextUI/TestRunner.php:517
0.5124 1210752 6. PHPUnit_Framework_TestSuite->run() /var/www/vendor/phpunit/phpunit/src/Framework/TestSuite.php:733
4.7228 16476656 7. PHPUnit_Framework_TestSuite->run() /var/www/vendor/phpunit/phpunit/src/Framework/TestSuite.php:733
4.7573 16484232 8. PageTest->run() /var/www/vendor/phpunit/phpunit/src/Framework/TestSuite.php:733
4.7574 16484232 9. PHPUnit_Framework_TestResult->run() /var/www/vendor/phpunit/phpunit/src/Framework/TestCase.php:868
4.7577 16484608 10. PageTest->runBare() /var/www/vendor/phpunit/phpunit/src/Framework/TestResult.php:686
22.8349 39277864 11. PageTest->runTest() /var/www/vendor/phpunit/phpunit/src/Framework/TestCase.php:913
22.8350 39278160 12. ReflectionMethod->invokeArgs() /var/www/vendor/phpunit/phpunit/src/Framework/TestCase.php:1062
22.8350 39278168 13. PageTest->testMyMethod() /var/www/vendor/phpunit/phpunit/src/Framework/TestCase.php:1062
22.8350 39278168 14. PageTest->objFromFixture() /var/www/app/tests/PageTest.php:17
22.8351 39278488 15. user_error() /var/www/vendor/silverstripe/framework/src/Dev/SapphireTest.php:505
Что не так с моим тестом и как я могу это исправить?