我有一个依赖于controller_name
的辅助方法,我想为此编写测试。
module NavigationHelper
def show_navigation?
!sessions_controller? && !registrations_controller?
end
private
def sessions_controller?
controller_name.eql?('sessions')
end
def registrations_controller?
controller_name.eql?('registrations')
end
end
这些是我尝试过的测试设置步骤:
RSpec.describe NavigationHelper, type: :helper do
describe '#show_navigation?' do
it 'is false for pages served by the sessions controller' do
# controller.params[:controller] = 'sessions'
# assign(:controller, 'sessions')
# controller = SessionsController
# helper.stub(:controller_name).and_return('sessions')
# allow(helper).to receive(:controller_name) { 'sessions' }
expect(show_navigation?).to eq(false)
end
end
end
如何适当地将呼叫存入controller_name
?
这是一个可行的解决方案:
require 'rails_helper'
RSpec.describe NavigationHelper, type: :helper do
describe '#show_navigation?' do
context 'SessionsController' do
let(:controller_name) { 'sessions' }
it { expect(show_navigation?).to eq(false) }
end
context 'RegistrationsController' do
let(:controller_name) { 'registrations' }
it { expect(show_navigation?).to eq(false) }
end
context 'other controllers' do
it { expect(show_navigation?).to eq(true) }
end
end
end
还可以解决这个问题吗?