php - 我的 Laravel 测试返回 302 重定向而不是 403 禁止状态
问题描述
我有一个Type
用title
字段和pretty_slug
字段调用的模型。
我有一个测试正在检查用户是否无法更新Type
实例:
<?
public function test_user_cannot_put_update_page() {
$type = Type::factory()->make([
'title' => 'Original type',
]);
$type->save();
$response = $this->put(route('types.update', [
'pretty_slug' => $type->pretty_slug,
'title' => 'New type',
]));
$response->assertForbidden();
$this->assertDatabaseHas('types', [
'title' => 'Original type'
]);
}
如果我这样做,dd($response->getContent());
我可以看到正在发生重定向:
现在奇怪的是,我对另一个名为的模型完全相同Level
:
<?
public function test_user_cannot_put_update_page() {
$level = Level::factory()->make([
'title' => 'Original level',
]);
$level->save();
$response = $this->put(route('levels.update', [
'pretty_slug' => $level->pretty_slug,
'title' => 'New level',
]));
$response->assertForbidden();
$this->assertDatabaseHas('levels', [
'title' => 'Original level'
]);
}
该模型与以下Level
内容完全相同Type
:相同的控制器,相同的 Trait 共享,相同的策略,相同的测试,相同的路由……我还有其他称为的模型,Idea
它们具有完全相同的行为。Concept
Episode
所有测试都通过,除了我的Type
模型:
我不知道为什么这条特定types.update
的路线不起作用。它应该返回 a302
但正在重定向。
当我使用网络表单时它正在工作:Type
实例正确更新。但是测试失败了。
如何调试此测试?我在哪里寻找代码中的问题?谢谢你的帮助。
编辑 1:添加控制器和路由
解决方案
我认为问题在于'levels.update'
路由可能受到auth
中间件的保护。
由于没有用户登录,auth
中间件将尝试重定向到登录页面。
推荐阅读
- javascript - 如何更新 MongoDB 中字符串的子集?
- google-bigquery - BigQuery:优化查询以获得每月访问量最大的 5 个维基百科页面
- python - 处理命令行参数中的 unicode 字符
- reactjs - 用值预填充 React 表单
- flutter - 重复动画特定时间,例如 Flutter 20 次
- out-of-memory - 在 OutOfMemory 异常上终止 Spring Cloud 任务
- google-apps-script - 修改代码 - 将范围复制到另一个电子表格 Google 表格
- c# - 我可以在单个按钮上添加 2 个功能吗(Unity)
- sql - 为什么 Jpa N+1 这么糟糕?
- python - Python的resource.RLIMIT_VMEM(或resource.RLIMIT_AS)返回的两个数字是什么意思?