2017-10-16 95 views
0

我有這樣一段代碼:如何測試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,這意味着這不是測試的正確方法。有什麼想法嗎?

回答

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。

+0

謝謝,我會考慮一下。 – Gishas