Laravel 8 PHPUnit 测试失败 -- Illuminate\Contracts\Filesystem\FileNotFoundException:路径中不存在文件

Laravel 8 PHPUnit Failed Test -- Illuminate\Contracts\Filesystem\FileNotFoundException : File does not exist at path

当运行下面的测试时,我在第$this->assertTrue(File::exists(database_path('migrations/'.$filename)));行得到一个错误。正在创建我的模型并正在创建迁移文件,但我认为 $filename 函数不正确 运行 因为正在创建的迁移文件名为 2021_10_28_165227_create_tests_table.phpassert 检查正在寻找迁移文件 2021_10_28_045227_create_tests_table.php。如您所见,文件名的 $now->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->artisan('make:model Test -m');

        // find the migration file and check it has a tenant_id on it
        $filename = $now->year . '_' . $now->format('m') . '_' . $now->format('d') . '_' . $now->format('h')
            . $now->format('i') . $now->format('s') .
            '_create_tests_table.php';
        $this->assertTrue(File::exists(database_path('migrations/'.$filename)));
        $this->assertStringContainsString('$table->unsignedBigInteger(\'tenant_id\')->index();',
            File::get(database_path('migrations/'.$filename)));
        // clean up
        File::delete(database_path('migrations/'.$filename));
        File::delete(app_path('Models/Test.php'));
    }
...

也许在使用 Carbon::now() 时选择不同的时区可以解决您的问题