Подтвердить что ты не робот

Какая разница между stub_model и mock_model в RSpec?

Какая разница между stub_model и mock_model в RSpec? До сих пор я знаю, что заглушки используются, чтобы просто запретить вызов реального метода и вернуть предопределенное значение, а mocks - это на самом деле ожидания и требуют, чтобы метод вызывался в приемнике.

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

4b9b3361

Ответ 1

stub_model

Метод stub_model генерирует экземпляр модели Active Model.

Хотя вы можете использовать stub_model в любом примере (модель, представление, контроллер, помощник), это особенно полезно в примерах, которые по своей природе более основаны на состоянии, чем на основе взаимодействия.

mock_model

Метод mock_model генерирует test double, который действует как активная модель модель. Это отличается от метода stub_model, который генерирует экземпляр реального класса ActiveModel.

Преимущество mock_model over stub_model заключается в том, что он является истинным двойником, поэтому примеры не зависят от поведения (или неправильного поведения) или даже существования какого-либо другого кода. Если вы работаете над спецификацией контроллера и вам нужна модель, которая не существует, вы можете передать mock_model строку, и сгенерированный объект будет действовать так, как если бы это был экземпляр класса, названного этой строкой.

rspec docs: stub_model и mock_model