Тестирование событий модели Eloquent в Laravel 11Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Тестирование событий модели Eloquent в Laravel 11

Сообщение Anonymous »

Кажется, я не могу найти однозначного ответа о том, как протестировать следующий метод с помощью тестов PHPUnit в Laravel.
Класс модели опроса

Код: Выделить всё

static::forceDeleted(
function ($survey) {
// Force delete the surveyable item.
$surveyable = $survey->surveyable;
if ($surveyable) {
$surveyable->forceDelete();
}
}
);
Как написать тест, который удаляет опрос, но проверяет, были ли удалены элементы в опросе.
Класс модели GasPipe

Код: Выделить всё

static::forceDeleting(
function ($gasPipe) {
// Check if any surveys reference this gas pipe
if ($gasPipe->surveys()->count() > 0) {
return false;
}
}
);
Я хочу создать тесты, чтобы убедиться, что GasPipe не удаляется, когда этого не должно быть. Кажется, я столкнулся с проблемой, из-за которой статические методы загрузки не запускаются в тестах.

Код: Выделить всё

public function it_deletes_surveyable_when_no_other_surveys_reference_it()
{
require_once base_path('tests/TestHelpers.php');

$pipeAttrs = gasPipeAttributesFromTopojson(base_path('tests/Fixtures/topojson-pipe-1.json'));
$pipe = GasPipe::factory()->create($pipeAttrs);

$survey = Survey::factory()->create([
'surveyable_type' => GasPipe::class,
'surveyable_id' => $pipe->id,
'assigned_to_id' => $this->user->id,
]);

$survey->forceDelete();

// Survey should be permanently deleted
$this->assertDatabaseMissing('surveys', ['id' => $survey->id]);

// Surveyable should be permanently deleted (no other surveys reference it)
$this->assertDatabaseMissing('gas_pipes', ['id' => $pipe->id]);
}
assertDatabaseMissing на gas_pipes всегда терпит неудачу.
Если я вручную удалю GasPipe с помощью чего-то вроде

Код: Выделить всё

$gasPipe->forceDelete();
Тест проходит, но если у меня есть тесты с двумя опросами, которые ссылаются на один и тот же канал, принудительное удаление GasPips непосредственно в тесте удаляет его, хотя это не должно быть, поэтому кажется, что ни одно из этих событий не срабатывает.
Код действительно работает, если я прохожу и тестирую его вручную в пользовательском интерфейсе, но я стараюсь постоянно избегать ручного тестирования, так как его установка требует много времени данные обновляются по мере необходимости каждый раз.

Подробнее здесь: https://stackoverflow.com/questions/797 ... laravel-11
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»