戏里戏外

Laravel 测试时禁用 Vite

2024-10-21#Laravel#Testing

在单元测试运行前可能不需要 Vite 构建资源,除非运行的是 Dusk 测试。

比如当运行测试命令时抛出如下错误:

Vite manifest not found at: /Users/curder/Sites/laravel/public/build/manifest.json

因为没有在测试前构建前端资源,所以对应用程序页面的静态资源请求找不到 Vite 清单文件,而这些文件通常需要在本地运行 npm run dev 或生产环境中运行 npm run build 时可用。

使用 Pest

在使用 Pest 进行功能测试时,可以通过在所有 Feature 测试中添加一个 beforeEach 钩子来禁用 Vite

uses(Tests\TestCase::class)
   ->beforeEach(fn () => $this->withoutVite())
    ->in('Feature');

使用 PhpUnit

如果使用的是 PHPUnit,可以在测试基类的 setUp 方法中调用 withoutVite 方法来实现相同的效果:

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;

    protected function setUp(): void
    {
        parent::setUp();
       $this->withoutVite();
    }
}

通过在测试中禁用 Vite,可以避免在测试环境中由于缺少前端构建资源而导致的错误。

这种方法特别适用于不需要前端资源的单元测试和功能测试。