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,確實找到了這個類,所以它與拼寫錯誤的名稱或類似的名稱無關。
是模特類第一次莫名其妙地「迷失」了嗎?
你能找出問題?創建一個只包含這兩行的測試:Mockery :: mock('Pedido');和Mockery :: mock('Cliente');並查看是否仍未找到型號 – carlosdubusm
確保您使用正確的名稱空間。並嘗試使用App :: make(repositories \ canarias \ PedidoDbRepository) –