Ошибка «Не удалось найти объект» в модульном тестировании Silverstripe 4, как это исправить? - PullRequest
0 голосов
/ 29 августа 2018

Ошибка «Не удалось найти объект» при модульном тестировании Silverstripe 4, как это исправить?.

с модульным тестом silverstripe 4, я получаю сообщение об ошибке «Не удалось найти объект «action1» ». Кто-нибудь может подсказать, что здесь происходит? Спасибо.

class CustomerCreditTransactionTest extends SapphireTest 
{



protected static $fixture_file = BASE_PATH.'/mysite/code/CustomerCreditTransactionTest.yml';


/**
 * @var string
 */
protected $readingmode = null;
/**
 * Default reading mode
 *
 * @var string
 */
protected $defaultMode = null;


public function setUp()
{
    $this->readingmode = 'Original';
    $this->defaultMode = 'Original';
}
public function tearDown()
{
    MirroredData::SetCurrentReadingStage($this->readingmode);
    MirroredData::SetDefaultWritingStage($this->defaultMode);
}


public function testCustomerName()
{
    $obj = $this->objFromFixture(CustomerCreditTransaction::class, 'transaction1');

    $this->assertEquals(
        'John@gmail.com',
        $obj->CustomerName(),
        'customer name is : '.$obj->CustomerName()
    );
}

 }

1 Ответ

0 голосов
/ 31 августа 2018

Вы перегружаете методы setUp и tearDown полностью. В этих методах SapphireTest обрабатывает создание ваших приборов, а также настройку манифестов конфигурации и т. Д. Поскольку вы перегрузили его, тесты не запустятся.

Используйте это вместо этого (примечание также изменило их на protected видимость, чтобы соответствовать родительскому классу):

protected function setUp()
{
    parent::setUp();

    $this->readingmode = 'Original';
    $this->defaultMode = 'Original';
}

protected function tearDown()
{
    MirroredData::SetCurrentReadingStage($this->readingmode);
    MirroredData::SetDefaultWritingStage($this->defaultMode);

    parent::tearDown();
}

Я не вижу, что находится в вашем файле фикстуры, поэтому я предполагаю, что все в порядке и проблема только в том, что он не загружен.

Другое предложение: файлы фикстур также могут быть относительными путями к файлам, поэтому вы можете просто использовать protected static $fixture_file = 'CustomerCreditTransactionTest.yml';, если файл существует в том же каталоге, что и ваш тестовый класс (если ваше приспособление живет в mysite/code, тогда я предполагаю, что это не так ' т, и вы можете игнорировать это предложение). Изменение этого параметра не повлияет на ваши тесты, поскольку то, что у вас есть, в порядке, но оно сделает его немного менее многословным.

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