0

我有一段这样的代码:

 public function index(Request $request, Runner $runnerParam)
{
    $name = $request->input('name');
    $fromDate = $request->input('from_date');
    $toDate = $request->input('to_date');

    $runners = Runner::query();

    if ($name) {
        $runners =  $runnerParam::search($name);
    }

    if ($fromDate && $toDate) {
       $runners->where('created_at', '<=',$toDate )
       ->where('created_at', '>=', $fromDate);
    }

    switch ($type) {
        case 1:
            $runners->where('role', '=', runner::PRO);
            break;
        case 2:
            $runners->where('role', '=', runner::AMATEUR);
            break;          
    }

    $runners = $runners->get();

    foreach($runners as $runner){
     $runner->distance = $runner->stats->sum('distance');
    }

    return $runners;    
}

问题是,我该如何为此编写测试?如果我只是尝试在测试中提供“名称”,它将不会返回任何内容,例如 search() 函数在测试时根本不起作用。非常努力地在这方面找到任何东西,但信息很少,我只得到了类似“将 Algolia 驱动程序设置为空”之类的东西,我设法做到了,但没有效果,因为我不知道有什么意义这样做以及如何在测试中应用它。那里绝对没有成功测试的例子,只有几个简短的答案并没有太大帮助的问题。

一个测试:

public function testNameFilter()
{

    $this->logIn();

    $runners = factory(runner::class, 30)->create();

    $name = $runners[0]->name;


    $response = $this->json('get', route('api::runners.get'), ['name' => $name]);

    $responseContent = $response->getContent();

    ...
}

所以,我最后得到的是空的 responseContent,这意味着这不是测试这个的正确方法。有什么想法吗?

4

1 回答 1

1

为什么不只测试您是否已正确配置您的课程以使用 Laravel Scout,而不是测试 Laravel Scout 是否按预期工作?

public function class_uses_scout() 
{
    $this->assertTrue(in_array('Laravel\Scout\Searchable', class_uses('App\FooModel')));
}

public function class_has_searchable_array()
{
    // compare the searchable array with a hardcoded array here
}

请务必在您的测试环境中设置禁用 Laravel Scout。

于 2017-11-28T01:37:24.077 回答