Laravel Dusk环境文件合并问题:MySQL与SQLite测试配置失效
我之前也踩过这个坑!你已经做了切换数据库连接的第一步配置,但还差几个关键步骤才能让SQLite在Dusk测试中正常工作,下面一步步来解决:
完善.env.dusk.local的SQLite配置
光设置DB_CONNECTION=sqlite还不够,SQLite不需要host、port、username和password这些参数,而且得明确指定数据库文件路径。修改你的.env.dusk.local:DB_CONNECTION=sqlite # 注释或删除MySQL相关配置项 # DB_HOST=127.0.0.1 # DB_PORT=3306 # DB_DATABASE=homestead # DB_USERNAME=homestead # DB_PASSWORD=secret # 显式指定SQLite数据库文件路径 DB_DATABASE=database/dusk.sqlite确保SQLite数据库文件存在
你可以手动在database目录下创建空的dusk.sqlite文件,或者用终端命令快速生成:# Linux/Mac touch database/dusk.sqlite # Windows(PowerShell) New-Item -Path database/dusk.sqlite -ItemType File验证config/database.php中的SQLite配置
打开config/database.php,确保sqlite驱动的配置正确读取环境变量:'sqlite' => [ 'driver' => 'sqlite', 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ],这里的核心是
database字段通过env('DB_DATABASE')读取你在.env.dusk.local中设置的路径。清除配置缓存(重要!)
如果之前运行过php artisan config:cache,Laravel会缓存配置文件,导致Dusk无法读取新的.env.dusk.local配置。执行命令清除缓存:php artisan config:clear用Dusk专属迁移命令初始化数据库
别用普通的migrate命令,改用Dusk的迁移命令,确保使用测试环境的SQLite数据库:php artisan dusk:migrate如果需要每次测试前重置数据库,可以在测试类中引入
RefreshDatabasetrait,或者运行php artisan dusk:migrate:fresh。
做完这些步骤后,再运行Dusk测试,应该就能正常使用SQLite数据库了!
内容的提问来源于stack exchange,提问作者Barnabas Kecskes

