首页 > 解决方案 > 我的 Laravel 测试返回 302 重定向而不是 403 禁止状态

问题描述

我有一个Typetitle字段和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它们具有完全相同的行为。ConceptEpisode

所有测试都通过,除了我的Type模型:

在此处输入图像描述

我不知道为什么这条特定types.update的路线不起作用。它应该返回 a302但正在重定向。

当我使用网络表单时它正在工作:Type实例正确更新。但是测试失败了。

如何调试此测试?我在哪里寻找代码中的问题?谢谢你的帮助。

编辑 1:添加控制器和路由

在此处输入图像描述

在此处输入图像描述

标签: phplaraveltesting

解决方案


我认为问题在于'levels.update'路由可能受到auth中间件的保护。

由于没有用户登录,auth中间件将尝试重定向到登录页面。


推荐阅读