laravel - Laravel 路由仅在 phpunit 测试期间返回 302 而不是 404 响应
问题描述
在 PHPUnit 测试期间,调用应该返回404
错误,但它会返回302
重定向。
使用spatie 权限给用户权限。
考试:
use RefreshDatabase;
public User $admin;
public function setUp(): void
{
parent::setUp();
$permission = Permission::firstOrCreate( [ 'name' => 'activities.delete' ] );
$role = Role::firstOrCreate( [ 'name' => 'Admin' ] );
$role->givePermissionTo( $permission );
$this->admin = User::factory()->create();
$this->admin->assignRole( 'Admin' );
$this->app->make( PermissionRegistrar::class )->registerPermissions();
}
public function test_as_a_user_i_can_not_delete_activities_that_do_not_exist(): void
{
Auth::login( $this->admin );
$this->assertAuthenticatedAs( $this->admin );
$response = $this->actingAs( $this->admin )
->delete( route( 'activities.destroy', 234234 ) );
$response->assertNotFound();
}
路线:
<?php
use Illuminate\Support\Facades\Route;
Route::group( [ 'middleware' => 'auth' ], function()
{
Route::group( [ 'prefix' => 'dashboard' ], function()
{
Route::resource( 'activities', \App\Http\Controllers\ActivityController::class )->except( [ 'show' ] );
});
});
删除功能:
public function destroy( Activity $activity ): RedirectResponse
{
if( auth()->user()->customer )
{
abort( 403 );
}
$deleted = $activity->delete();
return redirect()->route( 'activities.index' )->with( [
'message' => 'Activity '.( $deleted ? 'deleted' : 'not deleted' ),
'success' => $deleted,
] );
}
在开发中删除不存在的活动时,它按预期工作,它返回 404 错误。然而,在测试期间它返回一个 302 重定向。
还注意到,在测试期间删除现有活动时,会dd($activity)
返回一个空白模型而不是解析后的$activity
模型。$activity
在开发过程中再次按预期显示已解析的内容。
public function destroy( Activity $activity ): RedirectResponse
{
if( auth()->user()->customer )
{
abort( 403 );
}
dd($activity);
$deleted = $activity->delete();
return redirect()->route( 'activities.index' )->with( [
'message' => 'Activity '.( $deleted ? 'deleted' : 'not deleted' ),
'success' => $deleted,
] );
}
解决方案
显然. 中的数组中\Illuminate\Routing\Middleware\SubstituteBindings::class
缺少中间件。$middlewareGroups
web
App\Http\Kernel.php
https://laravel.com/docs/8.x/urls#url-defaults-middleware-priority
推荐阅读
- recursion - Prolog - 获取朋友的朋友列表
- visual-studio-code - VS Code 字符消失
- bash - 如何将输出值与各个变量相同
- google-maps-api-3 - Apps脚本中的Google Maps API不断失败
- java - 如何在函数的结果上设置监听器?
- db2 - 在 PLI/COBOL 程序中可以维护多少个(最大)DB2 多行提取游标?
- javascript - 在 React 中确认“返回”的导航
- yii2 - Yii2:发送响应内容后刷新()不起作用
- postgresql - Postgres中的封闭路径和多边形有什么区别?
- c# - 对与其他列中的选定值相匹配的列中的值求和