Laravel测试报错:testing.users表不存在,网站正常求解决
问题原因及解决方法
核心原因
测试环境使用的数据库(testing)和网站运行的数据库并非同一实例,且测试数据库未生成对应的users表;同时测试代码直接依赖了非测试环境的数据库记录,导致找不到数据。
具体解决步骤
检查测试环境数据库配置
Laravel测试默认加载.env.testing配置文件(若存在),或读取phpunit.xml中的环境变量。确认两点:- 测试环境配置的
DB_DATABASE为testing,且该数据库已在MySQL中创建; - 数据库用户名、密码配置正确,拥有访问该数据库的权限。
- 测试环境配置的
为测试数据库执行迁移
测试数据库初始为空,需运行迁移生成表结构:php artisan migrate --env=testing更推荐在测试类中引入
RefreshDatabasetrait,让Laravel自动在测试前后处理迁移:use Illuminate\Foundation\Testing\RefreshDatabase; class AwesomeTest extends TestCase { use RefreshDatabase; public function test_my_awesome_test() { // 测试代码 } }改用工厂创建测试数据
不要用User::find(1)依赖现有数据库记录,测试数据库无该数据。改用工厂生成测试用户:public function test_my_awesome_test() { $user = User::factory()->create(); // 在测试数据库创建新用户 $response = $this->actingAs($user)->get('/awesome/test'); $response->assertStatus(200); }验证phpunit.xml配置
打开项目根目录的phpunit.xml,确认数据库环境变量配置正确:<php> <env name="APP_ENV" value="testing"/> <env name="DB_DATABASE" value="testing"/> <!-- 其他必要配置 --> </php>
内容的提问来源于stack exchange,提问作者wtsuport
相关产品推荐
相关产品推荐

