2016-06-01 5 views
2

Я начинающий разработчик, пытающийся запустить тестовый набор для существующего приложения laravel, но у меня нет опыта в тестировании. Прямо сейчас я просто пытаюсь собрать некоторые тесты, чтобы получить определенную уверенность и опыт, чтобы написать более серьезные тесты. Я пытаюсь проверить отношения на модели (я понимаю, что это не очень разумные тесты) и пытается создать издевательский объект модели для этого (я также понимаю, что лучше сделать это в памяти в sqlite db, но основная цель здесь - проверить контроллеры, но я не знаю, как это сделать с проблемой аутентификации). У меня есть следующий простой, глупый тест:Ошибка при использовании Mockery/phpUnit в Laravel

public function testFoo() 
{ 
    $lead = m::mock('Lead'); 

    $this->mock->shouldReceive('program')->once(); 

    $this->assertEquals($lead->program_id, $lead->program->id); 
} 

Но я получаю следующее сообщение об ошибке:

LeadTest::testFoo 
BadMethodCallException: Received Mockery_0_Lead::getAttribute(), but no expectations were specified 

Я не понимаю, что эта ошибка пытается сказать мне, и я не нахожу никакой помощи googling проблема или чтение через документы, которые я могу найти.

Я предполагаю, что я не устанавливаю ожидаемые значения возвращаемого значения, но это довольно общий тест, и это не кажется правильным для ожидаемых возвращаемых значений. Что мне здесь не хватает?

Я просто тестирует отношения Laravel, чтобы убедиться, что у меня есть вещи, установленные вверх/сделано правильно:

public function program() 
{ 
    return $this->belongsTo('Program'); 
} 
+0

Это может помочь, если вы можете опубликовать свою оригинальную функцию, которую вы пытаетесь проверить, чтобы мы могли лучше понять, каким должен быть конечный результат. – user3158900

ответ

2

Проблема, что мне не хватает ожидаемого возвращаемого значения. Он должен был что-то вроде этого:

$this->mock->shouldReceive('program')->once()->andReturn(someObjectOrValue); 

И утверждение должно было быть что-то вроде:

$this->assertEquals(someObjectOrValue, $lead->program->id); 

издевательства документов намного более многословно, чем я думал. http://docs.mockery.io/en/latest/reference/expectations.html