В моем контроллере есть несколько before_actions. Но мне нужно пропустить конкретное действие before_action для всех тестов. Я не могу делать это в каждом тесте. Это следует сделать на глобальном уровне, возможно, в spec_helper илиrails_helper.
Например:
class SomeController < BaseController
before_action :some_before_action
Запуск каждого теста some_before_action следует игнорировать
@Stefan, потому что код в этом некотором before_action является временным и не должен тестироваться. Но все мои тесты в настоящее время не работают, потому что они вызывают это действие
Возможно before_action :some_before_action, unless: -> { Rails.env.test? }
, но вам, вероятно, следует устранить причину проблемы, то есть попытаться запустить тесты с действием, а не пропускать его.
Самый простой способ отключить это before_action
во всех наших тестах — добавить эту строку в ваш spec/rails_helper.rb
:
config.before(:all) do
allow_any_instance_of(SomeController)
.to receive(:some_before_action)
.and_return(true)
end
Рекомендую это только как временное решение, например, при рефакторинге, но не навсегда. Если вы обнаружите, что используете это постоянно, то рефакторинг контроллера и before_action
, безусловно, будет лучшим вариантом.
Хорошо, простым решением было добавить before_action :some_before_action, если только Rails.env.test? поскольку это временный код
before_action :some_before_action unless Rails.env.test?
— это не то же самое, что before_action :some_before_action, unless: Rails.env.test?
.
Как сейчас написано, ваш ответ неясен. Пожалуйста, отредактируйте , чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Более подробную информацию о том, как писать хорошие ответы, вы можете найти в справочном центре.
«Мне нужно пропустить определенное действие before_action для всех тестов» – почему? Можете ли вы дать больше контекста?