破碎的模拟中的RSpec NoMethodError

ApplicationController中,我有要在maintenance_mode_controller_specs中测试的结果。如何创建模拟maintenance_mode_active方法,该方法将在规范中返回false?

ApplicationController.rb

def maintenance_mode_active
  # ...

  feature_flag.active
end

maintenance_mode_controller_spec

context 'when maintenance mode is inactive' do
  let(:application_controller) { instance_double(ApplicationController) }

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

  it 'redirect to root page' do
    get :maintenance_mode
    expect(response).to have_http_status(:redirect)
  end
end

在上述规格下,我有一个错误:

  

失败/错误:feature_flag.active

     

NoMethodError:          nil:NilClass的未定义方法“活动”          你的意思是?行为类似?

这意味着模拟不起作用。

ahricher1 回答:破碎的模拟中的RSpec NoMethodError

我会尝试使用allow_any_instance_of

allow_any_instance_of(ApplicationController).to receive(:maintenance_mode_active).and_return(false)
,

由于存根发生在维护模式控制器本身中,因此您应该尝试:

controller.stub(:maintenance_mode_active).and_return(false)

allow_any_instance_ofexpect_any_instance_of由于多种原因被视为反模式。您可以阅读有关此here

的更多信息
本文链接:https://www.f2er.com/3067546.html

大家都在问