【问题标题】:Laravel testing redirect from functionLaravel 测试从函数重定向
【发布时间】:2021-08-25 23:34:37
【问题描述】:

如果我有一个函数可以检查字符串是否为数字,如果不是则重定向回来,如果是则什么也不做,即

function check_numeric(string $param) {
    if(!is_numeric($param)) {
        return Redirect::back()->with('Failed', 'Number!');
    }
}

我将如何在 PHPUnit 中进行测试?我曾尝试使用assertRedirect,但我不确定如何实现它(如果可能的话)

要清楚。 check_numeric() 函数是一个独立的函数,它被导入到控制器中以供不同的控制器类使用。函数本身没有类也没有路由。

我想做的是直接测试函数,而不用在控制器或路由中。

我可以通过以下方式测试pass 案例:

$this->assertNull(check_numeric('1')); // does what I want!!

但是我也想直接检查fail 类似的案例

$previousUrl = '/';

$this->from($previousUrl)->(check_numeric('five'))->assertRedirect($previousUrl);

【问题讨论】:

    标签: php laravel phpunit


    【解决方案1】:

    我认为没有自动方法来检查它是否重定向回来,但你可以构建它。

    想到方法。

    所有样本假设在phpunit下,测试扩展Tests\TestCase

    1 - 在发出请求之前检查 URL

    $currentUrl = "/";
    
    $response = $this->post('check-number', "five" );
    
    $response->assertRedirect($currentUrl);
    
    

    2 - 验证您在验证失败时发回的消息。

    
    $response = $this->post('/check-number', "five" );
    
    $this->followRedirects($response)->assertSee('Failed');
    
    

    YourController.php

    function check_numeric(string $param) {
        if(!is_numeric($param)) {
            return Redirect::back()->with('Failed', 'Number!');
        }
    }
    

    web.php

     Route::post('/check-number', 'App\Http\Controllers\YourControllerController@check_numeric');
    

    另一方面,在回答您之前的问题时,如果您想直接测试该功能,则必须按照您的预期进行,在这种情况下,如果一切正常,您将不会返回任何内容,所以处理这种情况的方法是:

    
    $this->assertNull(app('App\Http\Controllers\YourControllerController')->check_numeric("five"));
    
    

    这会失败,如果你传递一个数字就会通过。

    这有帮助吗?

    【讨论】:

    • 嗨 Hector,实际测试函数 check_numeric() 的语法是什么。我相信您为检查控制器类的路由所写的遗嘱?
    • 您好@matt,因为您询问了重定向,所以我专注于此,但我更新了答案以回应有关测试功能的问题。
    • 对不起,我认为我的问题不是很清楚,所以我编辑了它。该函数是一个独立的函数,被导入以供不同的控制器使用。我想在不调用路由或访问控制器的情况下对其进行测试。很抱歉造成混乱,感谢您的宝贵时间
    • 没问题,我会尽力帮助你的。
    猜你喜欢
    • 2016-07-18
    • 2018-01-22
    • 2015-06-19
    • 2017-10-30
    • 2014-02-28
    • 2016-11-05
    • 2021-03-01
    • 2015-02-01
    • 1970-01-01
    相关资源
    最近更新 更多