Ошибка создания тестового сапфирового модуля SilverStripe, «Не удалось найти объект», когда объект извлекается из прибора с помощью метода objFromFixture - PullRequest
1 голос
/ 19 марта 2020

Я работаю над проектом 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

Что не так с моим тестом и как я могу это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...