如何测试Laravel侦察员(与Algolia)?

问题描述:

我有这样一段代码:如何测试Laravel侦察员(与Algolia)?

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,这意味着这不是测试的正确方法。有什么想法吗?

为什么不只是测试你已经正确地配置你的类来使用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。

+0

谢谢,我会考虑一下。 – Gishas