Я пытаюсь должным образом высмеять прикованный вызов к модели Eloquent в контроллере. В моем контроллере я использую инъекцию зависимостей для доступа к модели, чтобы ее было легко высмеять, однако я не уверен, как тестировать прикованные вызовы и заставить работать правильно. Это все в Laravel 4.1 с использованием PHPUnit и Mockery.Тестирование прикомандированного вызова метода в Mockery
Контроллер:
<?php
class TextbooksController extends BaseController
{
protected $textbook;
public function __construct(Textbook $textbook)
{
$this->textbook = $textbook;
}
public function index()
{
$textbooks = $this->textbook->remember(5)
->with('user')
->notSold()
->take(25)
->orderBy('created_at', 'desc')
->get();
return View::make('textbooks.index', compact('textbooks'));
}
}
тест контроллера:
<?php
class TextbooksControllerText extends TestCase
{
public function __construct()
{
$this->mock = Mockery::mock('Eloquent', 'Textbook');
}
public function tearDown()
{
Mockery::close();
}
public function testIndex()
{
// Here I want properly mock my chained call to the Textbook
// model.
$this->action('GET', '[email protected]');
$this->assertResponseOk();
$this->assertViewHas('textbooks');
}
}
Я пытался добиться этого путем размещения этого кода перед $this->action()
вызова в тесте.
$this->mock->shouldReceive('remember')->with(5)->once();
$this->mock->shouldReceive('with')->with('user')->once();
$this->mock->shouldReceive('notSold')->once();
$this->app->instance('Textbook', $this->mock);
Однако, это приводит к ошибке Fatal error: Call to a member function with() on a non-object in /app/controllers/TextbooksController.php on line 28
.
Я также попробовал цепную альтернативу, надеясь, что это будет трюк.
$this->mock->shouldReceive('remember')->with(5)->once()
->shouldReceive('with')->with('user')->once()
->shouldReceive('notSold')->once();
$this->app->instance('Textbook', $this->mock);
Каков наилучший подход, который я должен предпринять для тестирования этого прикованного вызова метода с помощью Mockery.
Пожалуйста, прочитайте документацию https://github.com/padraic/mockery#mocking-demeter-chains-and-fluent -interfaces – Shakil