Я пытаюсь подделать ответ на вызов метода, но безуспешно.
В моих тестах отображаемая в html страница будет показывать количество страниц из. вызов <%= @pagy.pages %> (я использую гем Pagy), но в моем тесте мне не нужно считать страницы, только чтобы проверить, была ли страница открыта.
Таким образом, @pagy никогда не инициализировался в тесте.
Мне нужно, чтобы Minitest «подделывал» ответ на @pagy.pages, чтобы всегда отвечать на номер 1:
Как это сделать?
Спасибо!
После ответа @Ahmed это новый код, но он все еще не работает:
mock = MiniTest::Mock.new
mock.expect :pages, 1
Pagy.stub :new, mock do
create :lando, :brazilo
get '/ameriko/brazilo'
assert_response :success
end
Представление по-прежнему не может найти метод @pagy.pages.





Вы можете использовать Minitest Mocks в блоке setup (также может работать, если вы поместите этот код внутри самого блока тестового примера):
mock = Minitest::Mock.new
mock.expect :pages, 1
Pagy.stub :new, mock do
# Put the code that relies on `@pagy.pages` is `1`
end
Обратный след:
Minitest::UnexpectedError: ActionView::Template::Error: undefined method `pages' for nil:NilClass
app/views/events/_events_as_cards.haml:11:in `_app_views_events__events_as_cards_haml__846217806806687455_70361502341700'
app/helpers/events_helper.rb:27:in `display_events_by_style'
app/views/events/by_country.haml:20:in `_app_views_events_by_country_haml__4566190630208235120_70361501243420'
test/controllers/events_controller_test.rb:41:in `block (2 levels) in <class:EventsControllerTest>'
test/controllers/events_controller_test.rb:39:in `block in <class:EventsControllerTest>'
app/views/events/_events_as_cards.haml:11:in `_app_views_events__events_as_cards_haml__846217806806687455_70361502341700'
app/helpers/events_helper.rb:27:in `display_events_by_style'
app/views/events/by_country.haml:20:in `_app_views_events_by_country_haml__4566190630208235120_70361501243420'
test/controllers/events_controller_test.rb:41:in `block (2 levels) in <class:EventsControllerTest>'
test/controllers/events_controller_test.rb:39:in `block in <class:EventsControllerTest>'
Finished in 1.53247s
1 tests, 0 assertions, 0 failures, 1 errors, 0 skips
I, [2019-07-15T10:00:50.384204 #47531] INFO -- : Running locally, skipping Codacy coverage
Process finished with exit code 1
Можете ли вы опубликовать полный backtrace? или хотя бы строку, в которой произошла ошибка.
Я добавил обратную связь. Я уже нашел решение для своего теста (создание НАСТОЯЩЕГО экземпляра @pagy), но мне все еще нужно понять, что я делал неправильно с Mock и Stub.
Это потому, что вам нужно установить @pagy переменную экземпляра контроллера перед запуском тестовой спецификации: controller.instance_variable_set(:@pagy, your_mock_variable)
Все равно ничего хорошего. МиниТест ответил:
Minitest::UnexpectedError: ActionView::Template::Error: undefined method `pages' for nil:NilClass