2014-11-27 5 views
1

Я пытаюсь понять тесты и издевательства с Laravel. У меня есть установка шаблона репозитория, которую пользователи моего контроллера. Я хочу, чтобы проверить мой основной getAllUsers() метод:Mockery «shouldReceive» еще не существует

public function test_get_all_users_method() 
{ 
    $repo = Mockery::mock('Acme\Repositories\User\UserRepository'); 
    $repo->shouldReceive('all')->once()->andReturn('foo'); 

    $controller = new Acme\Controllers\Api\UserController($repo); 
    $response = $controller->getComponents(); 

    $this->assertEquals('foo', $response); 
} 

Как я понимаю, я насмехаясь мой UserRepository, и я ожидаю, что моя UserRepository иметь это all() метод хит. Это возвращает некоторые фиктивные данные, и я ожидаю увидеть это в своем ответе.

Так что это нормально. Метод all() существует в моей реализации Eloquent репозитория. Однако, если я удалю метод all(), тест все равно пройдет ... Почему? Конечно, тест должен потерпеть неудачу.

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

Приветствия

ответ

2

Вот как издевательство работает по умолчанию, мне нравится, что путь, потому что это позволяет мне развиваться выдавать желаемое за действительное, то есть я хочу, чтобы мой интерфейс UserRepository был all метод.

Вы можете сказать, издевательство, чтобы запретить это, хотя, это немного некрасиво, но вы можете поместить это в тестовом загрузочном файле:

\Mockery::getConfiguration()->allowMockingNonExistentMethods(false); 

Вы также можете установить это контролировать его с помощью переменной среды или что-то, поэтому вы допускаете насмешливые несуществующие методы при нормальном использовании, но не допускаете его при непрерывном запуске интеграции и т. д.

+0

Право: я пытаюсь добавить тесты к существующей кодовой базе, так было в мышлении " метод X требует, чтобы метод Y функционировал должным образом, поэтому класс с наддувом должен иметь этот метод ». Так что ура, это осуществит! – Alias

Смежные вопросы