Ошибка «Не удалось найти объект» в модульном тестировании Silverstripe 4, как это исправить?
с модульным тестом Silverstripe 4, я получаю сообщение об ошибке «Не удалось найти объект« транзакция1 »».
Кто-нибудь может подсказать, что здесь происходит? Благодарю.
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(
'[email protected]',
$obj->CustomerName(),
'customer name is : '.$obj->CustomerName()
);
}
}
Вы перегружаете 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
тогда я предполагаю, что это не так, и вы можете игнорировать это предложение). Изменение этого параметра не повлияет на ваши тесты, поскольку то, что у вас есть, хорошо, но сделает его немного менее многословным.
Других решений пока нет …