2014-02-26 45 views
2

我正在開發一個使用Laravel 4並嘗試遵循TDD的應用程序。我按照Jeffrey Way或Philip Brown的教程,使用我的數據庫的存儲庫。我以前遇到過這個問題(Mockery not calling method from repository (interface)),但現在在我的測試中一切正常。不過,我得到一個錯誤試圖嘲弄2個庫在同一個測試,像這樣:與Laravel 4同時嘲笑2個數據存儲庫4

class PedidosControllerTest extends TestCase { 

    private $mock; 
    private $pedidoModelMock; 
    private $mockCliente; 
    private $clienteModelMock; 

    function setUp() { 
     parent::setUp(); 
     $this->mock = $this->mock('repositories\canarias\PedidoDbRepository'); 
     $this->pedidoModelMock = Mockery::mock('Pedido'); 
     $this->mockCliente = $this->mock('repositories\canarias\ClienteDbRepository'); 
     $this->clienteModelMock = Mockery::mock('Cliente'); 
    } 


    public function mock($class) 
    { 
     $mock = Mockery::mock('Model', $class); 

     $this->app->instance($class, $mock); 

     return $mock; 
    } 

    protected function tearDown() 
    { 
     Mockery::close(); 
    } 


    public function testIndexWithClient() 
    { 
     $nestedView = 'pedidos.index'; 
     $this->registerNestedView($nestedView); 

     $this->mockCliente 
      ->shouldReceive('find') 
      ->once() 
      ->with(698) 
      ->andReturn($this->clienteModelMock); 

     $this->mock 
      ->shouldReceive('findAllFromCliente') 
      ->once() 
      ->with(698) 
      ->andReturn($this->pedidoModelMock); 

     $this->clienteModelMock 
      ->shouldReceive('getAttribute') 
      ->once() 
      ->with('nombre') 
      ->andReturn('Pepito'); 

     $this->call('GET', '/clientes/698/pedidos'); 
     $this->assertResponseOk(); 
     $this->assertViewHas('pageAttributes'); 
     $this->assertViewHas('contenido'); 
     $this->assertNestedViewHas($nestedView, 'pedidos'); 
     $this->assertNestedViewHas($nestedView, 'cliente'); 
    } 
} 

從我測試(沒有雙關語意),這個問題似乎與此代碼由共享有關這兩個$ this-> mock和$ this-> mockCliente:

Mockery :: mock('Model',$ class);

我收到一個錯誤,指出Model類不存在。在測試的其他功能中,我只使用ONE mock,確實找到了這個類,所以它與拼寫錯誤的名稱或類似的名稱無關。

是模特類第一次莫名其妙地「迷失」了嗎?

+1

你能找出問題?創建一個只包含這兩行的測試:Mockery :: mock('Pedido');和Mockery :: mock('Cliente');並查看是否仍未找到型號 – carlosdubusm

+0

確保您使用正確的名稱空間。並嘗試使用App :: make(repositories \ canarias \ PedidoDbRepository) –

回答

0

事實證明,這確實是一個問題,類被拼錯(白癡錯誤,我知道)。它應該是

$this->mockCliente = $this->mock('repositories\canarias\ClientesDbRepository'); 

,而不是

$this->mockCliente = $this->mock('repositories\canarias\ClienteDbRepository');