如何在Laravel中测试POST路由

Mar*_*tyn 11 php phpunit laravel

我正在做以下测试对Laravel的POST调用.我希望根据我的路线,问题的POST将作为商店操作方法发送.这适用于浏览器.

我的测试:

public function setUp()
    {   
        parent::setUp();

        Session::start();
    }

    public function testStoreAction()
    {
        $response = $this->call('POST', 'questions', array(
            '_token' => csrf_token(),
        ));

        $this->assertRedirectedTo('questions');
    }
Run Code Online (Sandbox Code Playgroud)

但是,我告诉我重定向不匹配.此外,我可以看到它根本不是商店行动方法.我想知道它将采用什么动作方法,以及它为什么不去存储方法(如果我查看路径:列表我可以看到有一个POST问题/路由应该转到questions.store;这个也适用于浏览器,但不适用于我的测试).此外,我正在为此资源正确编写呼叫吗?我在这里添加了令牌,因为它正在抛出异常,在某些测试中我会让令牌检查通过.

小智 5

你可以试试这个:

public function testStoreAction()
{
    Session::start();
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));
    $this->assertEquals(302, $response->getStatusCode());
    $this->assertRedirectedTo('questions');
}
Run Code Online (Sandbox Code Playgroud)


小智 2

测试路由的最推荐方法是检查200响应。post当您有多个测试时(例如您一次检查所有路线),这非常有帮助。

为此,只需使用:

public function testStoreAction()
{
    $response = $this->call('POST', 'questions', array(
        '_token' => csrf_token(),
    ));

    $this->assertEquals(200, $response->getStatusCode());
}
Run Code Online (Sandbox Code Playgroud)

  • 但此操作不会返回 200 代码,我正在重定向用户 (30x),并且我想确认他们访问了正确的 URL(问题)。 (2认同)