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

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

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

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()
    );
}

 }

у вас есть приспособление transaction1?

delboy1978uk 29.08.2018 11:34

да, namespace \ CustomerCreditTransaction: transaction1: Amount: 100 Комментарий: тестовый комментарий 1 Customer: => namespace \ Customer.Jone

kosala manojeewa 29.08.2018 11:38

Я так понимаю, вы это проверили? docs.silverstripe.org/en/3.0/topics/testing/…

delboy1978uk 29.08.2018 11:42

из-за серебряной полосы 4 я следую этому руководству, docs.silverstripe.org/en/4/developer_guides/testing/fixtures

kosala manojeewa 29.08.2018 11:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
4
100
1

Ответы 1

Вы полностью перегружаете методы 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, то я предполагаю, что это не так, и вы можете проигнорировать это предложение. ). Изменение этого не повлияет на ваши тесты, поскольку то, что у вас есть, в порядке, но сделает его немного менее подробным.

Я внес изменения и запустил тест, результатом была ошибка с небольшим улучшением, .... ошибка: SilverStripe\ORM\Connect\DatabaseException:Couldn't run query:INSERT INTO "CustomerCreditTransaction_Client" ("Created") VALUES(NOW())42S02-1146: Table 'ss_tmpdb_1535708859_4128594.CustomerCreditTransaction_Clien‌​t' ``doesn't exist

kosala manojeewa 31.08.2018 11:54

@kosalamanojeewa убедитесь, что вы добавили '' flush=1 в конец вашей команды phpunit, иначе вам нужно будет показать нам свой файл фикстуры =)

scrowler 02.09.2018 14:10

вот файл приспособлений, namespace\CustomerCreditTransaction:transaction1:Amount: 100Comment: testing comment 1Customer: => namespace\Customer.Jonetransaction2:Amount: 200Comment: testing comment 2Customer: => namespace\Customer.Joenamespace\Customer:customer1:FirstName: JohnEmail: [email protected]customer2:FirstName: JoeEmail: [email protected]

kosala manojeewa 03.09.2018 05:02

Другие вопросы по теме