Как протестировать Laravel Scout (с Алголией)?

У меня есть такой кусок кода:

 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 значение null», что мне удалось сделать, но безрезультатно, так как я не знаю, в чем смысл делать это и как вы применяете это в тестах. Там нет абсолютно никаких примеров успешных тестов, только несколько вопросов с краткими ответами, которые не совсем помогли.

Кусочек теста:

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, что означает, что это неправильный способ проверить это. Какие-нибудь мысли?


person Gishas    schedule 16.10.2017    source источник


Ответы (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 в своей тестовой среде.

person zkolnik    schedule 28.11.2017
comment
Спасибо, я подумаю. - person Gishas; 28.11.2017