Laravel 8 PHPUnit Провалил тест — ОсветитьКонтрактыФайловая системаИсключение FileNotFoundException : Файл не существует по пути

#php #laravel #phpunit

Вопрос:

При выполнении приведенного ниже теста я получаю ошибку в строке $this-gt;assertTrue(File::exists(database_path('migrations/'.$filename))); . Моя модель создается, и создается файл миграции, но я не думаю $filename , что функция работает должным образом, потому что создаваемый файл миграции имеет имя 2021_10_28_165227_create_tests_table.php , но assert проверки ищут файл миграции 2021_10_28_045227_create_tests_table.php . Как вы можете видеть $now-gt;format('h') , часть имени файла отличается от того, что создано, чем от того, что проверяется.

Отдельной переменной, которая может быть или не быть проблемой, является то, что я использую Laravel Valet, что может быть причиной того, что час, секунды и минуты не синхронизируются с моим местным временем.

 ... class TenantScopeTest extends TestCase {  use RefreshDatabase, WithFaker;    public function a_model_has_a_tenant_id_on_the_migration()  {  $now = Carbon::now();  $this-gt;artisan('make:model Test -m');   // find the migration file and check it has a tenant_id on it  $filename = $now-gt;year . '_' . $now-gt;format('m') . '_' . $now-gt;format('d') . '_' . $now-gt;format('h')  . $now-gt;format('i') . $now-gt;format('s') .  '_create_tests_table.php';  $this-gt;assertTrue(File::exists(database_path('migrations/'.$filename)));  $this-gt;assertStringContainsString('$table-gt;unsignedBigInteger('tenant_id')-gt;index();',  File::get(database_path('migrations/'.$filename)));  // clean up  File::delete(database_path('migrations/'.$filename));  File::delete(app_path('Models/Test.php'));  } ...  

Комментарии:

1. Итак, выбор другого часового пояса при использовании Carbon::теперь устранит вашу проблему?

2. Классно! Это сработало. Отправьте в качестве ответа, и я приму его. Спасибо.

3. Приятно это знать! Спасибо

4. Ваш тест вообще не имеет смысла, вы проверяете, работает ли make:model (собственная консольная команда фреймворка)… вам никогда не нужно тестировать фреймворк, кроме вашего собственного кода, так что это make:model ваша замена или это собственная команда ?

Ответ №1:

Возможно, выбор другого часового пояса при использовании Carbon::now() решит вашу проблему