У меня есть несколько интеграционных тестов с phpunit,
и в процессе испытаний есть некоторые журналы, записанные в файлы в системе.
Я хотел бы проверить, была ли написана строка во время теста, это возможно?
пример:
/** @test */
function action_that_writes_to_log() {
$this->call('GET', 'path/to/action', [], [], $requestXml);
//I want this:
$this->assertFileHas('the log line written', '/log/file/path.log');
}
Очевидный способ:
Реализация пользовательского метода подтверждения, подобного тому, который вы предлагаете: assertFileHas
, Это довольно просто, просто проверьте, появляется ли строка в файле. Проблема, которую вы можете получить, состоит в том, что линия уже может существовать из другого теста или тот же тест уже запущен. Возможным решением для этого является удаление содержимого журналов перед каждым тестом или тестовым классом, в зависимости от ваших потребностей. Вам понадобится метод, который удаляет журналы и вызывает его из setUp
или же setUpBeforeClass
,
Я бы пошел с другим подходом: насмешка над компонентом журналирования и проверка правильности вызова:
$logger_mock->expects($this->once())
->method('log')
->with($this->equalTo('the log line written'));
Это позволяет легко проверить, что компоненты регистрируют правильные сообщения, но вам также необходимо реализовать тест, который проверяет, действительно ли регистратор способен записывать данные в файл. Но этот тест проще реализовать один раз, а затем просто проверить, что каждый компонент вызывает метод ведения журнала.
Других решений пока нет …