【问题标题】:laravel unit test index function in controller控制器中的laravel单元测试索引功能
【发布时间】:2017-04-23 08:59:44
【问题描述】:

这是我的索引函数

public function index($alias, $profileId)
{
    $this->setClientAndClientProfile($alias, $profileId);

    $routeData = Routedata
                        ::where('client_id', $this->client->id)
                        ->paginate(10);

    return view('client.route_data.index', compact('routedata'))->with('client', $this->client)->with('clientProfile', $this->clientProfile);
}

setClientAndClientProfile 的功能只是检查用户类型并带上他的个人资料

那么如何为这个函数写一个测试呢?

【问题讨论】:

    标签: php laravel unit-testing laravel-5 laravel-5.1


    【解决方案1】:

    在您的情况下,您可以简单地断言路由返回的视图具有路由数据。

    public function testIndex()
    {
        $this->call('GET', '/path/to/my/controlller/method');
    
        $this->assertViewHas('routedata');
        $this->assertViewHas('client');
        $this->assertViewHas('clientProfile');
    }
    

    但是,您可以更进一步,您可以对发送到视图的数据类型进行断言。

    首先,抓取数据:

    $routedata = $response->original->getData()['routedata'];
    $client = $response->original->getData()['client'];
    $clientProfile = $response->original->getData()['clientProfile '];
    

    现在您可以测试这些变量的instances 以确保它们也被正确设置:

    $this->assertInstanceOf('\Illuminate\Database\Eloquent\Collection', $routedata);
    $this->assertInstanceOf('\App\Client', $client);
    $this->assertInstanceOf('\App\ClientProfile', $clientProfile);
    

    总之会是这样的:

    public function testIndex()
    {
        $this->call('GET', '/path/to/my/controlller/method');
    
        $this->assertViewHas('routedata');
        $this->assertViewHas('client');
        $this->assertViewHas('clientProfile');
    
        $routedata = $response->original->getData()['routedata'];
        $client = $response->original->getData()['client'];
        $clientProfile = $response->original->getData()['clientProfile '];
    
        $this->assertInstanceOf('\Illuminate\Database\Eloquent\Collection', $routedata);
        $this->assertInstanceOf('\App\Client', $client);
        $this->assertInstanceOf('\App\ClientProfile', $clientProfile);
    
    }
    

    我对@9​​87654326@和$clientProfile的类型做了假设,所以你应该相应地调整类。

    希望这会有所帮助。

    【讨论】:

    • 不做登录测试?
    • 你在这个'/path/to/my/controller/method'中是什么意思你是指包含索引方法的控制器文件?
    • @flower route。所以如果是ClientProfile 控制器,可能是/client-profiles
    • 我从路由列表中检查了我看到这个 | |得到|头|后端/路由数据 | backend.route-data.index | App\Http\Controllers\Backend\RoutedataController@index |应用\Http\中间件\后端|
    • @flower 然后你会使用/backend-route-data 作为你的路线。
    猜你喜欢
    • 2019-08-24
    • 2023-03-07
    • 2020-08-12
    • 2018-03-09
    • 2014-09-13
    • 2021-09-07
    • 2021-02-17
    • 1970-01-01
    • 2013-05-28
    相关资源
    最近更新 更多