Laravel5.6测试/home端点预期200却返回302测试失败如何解决
故障原因
302状态码为临时重定向标识,此次报错核心原因是Laravel默认生成的/home路由挂载了auth身份校验中间件,未登录状态下访问会自动重定向至登录页面,因此返回302而非预期的200状态码。
修复方案
- 方案一:测试流程中模拟登录已授权用户
Laravel测试套件内置用户身份模拟方法,修改UserTest.php代码如下即可:<?php namespace Tests\Feature; use Tests\TestCase; use App\User; class UserTest extends TestCase { public function testExample() { // 快速创建测试用户并模拟登录 $user = factory(User::class)->create(); $response = $this->actingAs($user)->get('/home'); $response->assertStatus(200); } } - 方案二:移除
/home路由的登录校验限制
如果业务层面/home不需要登录即可访问,打开routes/web.php,找到对应路由定义,删除auth中间件挂载即可:// 原代码 Route::get('/home', 'HomeController@index')->name('home')->middleware('auth'); // 修改后 Route::get('/home', 'HomeController@index')->name('home');
额外配置优化
当前phpunit.xml中配置的APP_ENV值为local,优先级高于环境配置文件,会导致.env.testing无法生效,建议将对应行修改为<env name="APP_ENV" value="testing"/>,实现测试环境与开发环境配置隔离,避免后续出现配置冲突问题。
内容的提问来源于stack exchange,提问作者whenitrainsitpours
相关产品推荐
相关产品推荐

