Laravel Livewire注册组件测试提示不存在redirect键错误如何解决
问题原因及修复方案
原因1:验证未通过,未执行到跳转逻辑
你的测试用例中传入的密码是secret,仅6位,但组件的验证规则要求密码min:8,验证失败后直接终止逻辑,不会走到后续的跳转代码,因此没有返回redirect相关数据。
原因2:Livewire跳转写法不规范
在Livewire组件中直接使用return redirect('/')的写法,浏览器端访问时可以正常跳转,但测试时assertRedirect方法无法识别这种全局辅助函数返回的跳转对象,会提示找不到redirect键。
修复步骤
- 调整测试用例的密码长度,符合验证规则:
class RegisterTest extends TestCase { use RefreshDatabase; /** @test */ public function can_register() { Livewire::test('auth.register') ->set('name', 'user') ->set('email', 'user@outlook.com') ->set('password', 'secret123') // 改为8位以上密码 ->set('password_confirmation', 'secret123') ->call('register') ->assertRedirect('/'); } }
- 调整组件内跳转写法,使用Livewire自带的redirect方法:
public function register() { $data = $this->validate([ 'name' => 'required|string', 'email' => 'required|email', 'password' => 'required|confirmed|min:8|string' ]); User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); // 去掉return,调用Livewire自带的redirect方法 $this->redirect('/'); }
修改完成后重新执行测试即可正常通过。
内容的提问来源于stack exchange,提问作者Sead Silajdzic
相关产品推荐
相关产品推荐

