Yii2: как записывать логи в файл при тестировании с Codeception?

Я настроил компонент log с FileTarget в основной конфигурации и ожидал, что Yii::error() будет писать сообщения в файл, когда я буду запускать тесты. Но логирование было подхвачено Codeception\Lib\Connector\Yii2\Logger и папка лога осталась пустой.

Можно ли заставить Yii2 писать логи в этой ситуации?


person Mik    schedule 04.05.2018    source источник


Ответы (2)


Вы можете настроить правильный регистратор перед тестом:

public function testSomething() {
    Yii::setLogger(Yii::createObject(\yii\log\Logger::class));
    Yii::$app->log->setLogger(Yii::getLogger());
    // log something
    Yii::getLogger()->flush();
    // test log file
}
person rob006    schedule 05.05.2018
comment
Кажется, это не имеет никакого эффекта, я не вижу никаких изменений в файлах журнала - person Mik; 06.05.2018
comment
Куда ты это положишь? Я пробовал в коде, внутри тестового файла, и ничего не регистрируется. - person friek108; 31.05.2019
comment
Можете ли вы предоставить дополнительную информацию / лучший ответ? Пожалуйста - person friek108; 31.05.2019

<?php

namespace tests;

class SomeTest extends \yii\codeception\TestCase
{

    public function testLogMessage()
    {
        \Yii::error('something bad occurred');
    }

}

И это правильно регистрирует ошибку в runtime/log/app.log с сообщением:

05.05.2018 03:42:04 [127.0.0.1] [ошибка] [приложение] произошло что-то плохое

person Azraar Azward    schedule 05.05.2018
comment
Хорошо, но мне не нужно использовать Yii::error в методах тестирования, мне нужно протестировать код, который использует Yii::error. - person Mik; 05.05.2018