簡體   English   中英

RSpec 如何在另一個方法中模擬方法

[英]RSpec how to mock method inside another method

application_controller我有兩種方法,我想在maintenance_mode_controller_specs中進行測試。 如何創建模擬maintenance_mode_active? 哪個會返回false以在check_maintenance? ?

application_controller.rb before_action:check_maintenance?

private

def check_maintenance?
  if maintenance_mode_active? == true
    redirect_to maintenance_mode
  elsif request.fullpath.include?(maintenance_mode_path)
    redirect_to :root
  end
end

def maintenance_mode_active?
  # do sth ...
  mode.active?
end

maintenance_mode_controller_spec.rb

context 'when maintenance mode is active' do
  let(:maintenance_mode?) { instance_double(ApplicationController) }

  before do
    allow(ApplicationController).to receive(:maintenance_mode_active?).and_return(false)
  end

  it 'redirect to root path' do
    expect(described_class).should redirect_to(maintenance_mode_path)
  end
end

maintenance_mode_active是一個實例方法,你在 class 級別上存根它。 您需要使用allow_any_instance_of

before do
  allow_any_instance_of(ApplicationController).to receive(:maintenance_mode_active?).and_return(false)
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM