Я просмотрел буквально сотни страниц, и я не могу найти, что отличает мою ситуацию от рабочих примеров, которые я нашел на этих страницах.Mocking the Eloquent Model
Я использую Laravel 4.2, PHPUnit 4.3.1 и последнюю версию Mockery от Composer. Я запускаю тест PHPUnit на своем контроллере, AppController, и я хотел бы перехватить резервную базу данных Eloquent(), издеваясь над моделью. Хотя при создании Mock ошибок не возникает, макет также не привязан к моей модели, поэтому строки все еще создаются.
Что мне здесь не хватает? Благодаря!
Моя ошибка с издевательством: Mockery\Exception\InvalidCountException: Method save() from Mockery_0_EventRsvp should be called exactly 1 times but called 0 times.
// Located at /app/tests/app/AppControllerTest.php
class AppControllerTest extends TestCase {
public function setUp() {
parent::setUp();
Session::start();
Mail::pretend();
}
public function tearDown() {
parent::tearDown();
\Mockery::close();
}
public function testPostApp() {
$myvar = array();
$this->mock = \Mockery::mock('Eloquent','EventRsvp');
$this->app->instance('EventRsvp', $this->mock);
$this->mock
->shouldReceive('save')
->once()
->andReturn('true');
$response = $this->call('POST', '/3tDYSL0', $myvar);
}
}
// Located at /app/controllers/AppController
class AppController extends BaseController {
public function saveApp($shortUrl){
$rsvp = new EventRsvp;
$rsvp->fieldone = '124';
$rsvp->fieldtwo = '30233';
$rsvp->save();
$returnredirect = Redirect::to(Request::path(). '/complete');
return $returnredirect;
}
}
// Located at /app/models/EventRsvp.php
<?
class EventRsvp extends Eloquent {
protected $guarded = array('id');
use Illuminate\Database\Eloquent\SoftDeletingTrait;
protected $dates = ['deleted_at'];
public function relationshipone()
{
return $this->belongsTo('RelationshipOne','idone');
}
public function relationshiptwo()
{
return $this->belongsTo('RelationshipTwo','idtwo');
}
}
?>
Ваш код является примером не проверяемого. Читайте об инъекции зависимостей и о том, почему «плохо» использовать «новый класс» в вашем контроллере. Вы не можете ссылаться на этот «новый класс», насмехаясь, вам нужно вводить макет на ваш контроллер. –
@JarekTkaczyk Хм, после прочтения, да, ты прав. Вся моя кодовая база написана таким образом, похоже, что у меня большая задача передо мной. Можете ли вы ответить на свой комментарий? Выглядит достаточно хорошо, чтобы отметить как ответ на меня. –