2015-10-16 83 views
0

我正在努力讓嘲笑使用特定的Laravel 5項目。下面是我寫的測試:嘲笑Laravel 5使用嘲笑的課程

<?php 

use Illuminate\Foundation\Testing\WithoutMiddleware; 
use Illuminate\Foundation\Testing\DatabaseMigrations; 
use Illuminate\Foundation\Testing\DatabaseTransactions; 
use App\Group; 
use App\Dealer; 
use App\News; 
use App\User; 

class PushControllerTest extends ControllerTestCase 
{ 
    public function testCreatingPush() 
    { 
     // Set user 
     $this->be($this->user); 

     // Mock Pushwoosh 
     $this->mock = \Mockery::mock('PushWoosh\PushWoosh', array('createMessage' => true)); 
     $this->app->instance('PushWoosh\PushWoosh', $this->mock); 
     $this->mock->shouldReceive('createMessage')->once()->andReturn(true); 

     // Put together the data 
     $data = array(
      'msg' => 'My first push notification' 
     ); 

     // Send a POST request 
     $response = $this->call(
      'POST', 
      '/admin/api/v1/pushes', 
      $data, 
      array(), 
      array(), 
      array() 
     ); 
     $this->assertResponseStatus(200); 
    } 
} 

下面是有問題的控制器:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use App\User; 
use App\Dealer; 

use Config; 

class PushController extends CustomBaseController 
{ 
    /** 
    * Store a newly created resource in storage. 
    * 
    * @param Request $request 
    * @return Response 
    */ 
    public function store(Request $request) 
    { 
     // Get group for user 
     $group = $this->user->group; 

     // Send a Push notification 
     $pushwoosh = new \PushWoosh\PushWoosh(
      // @codeCoverageIgnoreStart 
      Config::get('app.pushwoosh_application'), 
      '', 
      '', 
      Config::get('app.pushwoosh_apitoken') 
      // @codeCoverageIgnoreEnd 
     ); 

     // Validate content 
     $valid = $this->validate($request, [ 
      'msg' => 'required' 
     ]); 

     // Get message and target (if any) 
     $msg = $request->input('msg'); 
     $target = $request->input('target'); 

     // Send push notification 
     if ($target) { 
      $users = User::where('dealer_id', $target)->get(); 
     } else { 
      $users = User::where('group_id', $group->id)->get(); 
     } 
     $pushesToSend = array(); 
     foreach($users as $user) { 
      // Send push notifications for this user 
      $push = array(); 
      $push['content'] = $msg; 

      // Define conditions 
      $push['conditions'] = ['UserID', 'EQ', $user->id]; 

      // Add it to the list 
      array_push($pushesToSend, $push); 
     } 

     // Send pushes 
     $response = $pushwoosh->createMessage($pushesToSend); 

     // Respond 
     if ($response) { 
      return response()->json(200); 
     } else { 
      return response()->json(400); 
     } 
    } 
} 

現在,我使用Pushwoosh從管理員控制檯發送推送消息。我用來與Pushwoosh對接的庫是here。我是Mockery的新手,我無法看到它嘲笑有問題的庫 - 當我運行測試時,推送請求仍然存在,測試失敗,因爲它沒有看到預期的調用。我究竟做錯了什麼?

回答

1

在控制器代碼中,您需要從Laravel容器獲取PushWoosh\PushWoosh的實例,而不是實例化自己的實例。

+0

請您詳細說明一下好嗎? –

+0

最終得出結論 - 必須爲Pushwoosh庫創建一個服務提供者,並將其注入到控制器中。之後,一切按預期工作。 –