如何为RSpec帮助程序规范添加controller_name方法?

问题描述 投票:0回答:1

我有一个依赖于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

ruby-on-rails-5.2 rspec3
1个回答
0
投票

这是一个可行的解决方案:

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

还可以解决这个问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.