【发布时间】:2021-07-02 14:16:03
【问题描述】:
我有一个控制器,我想为其编写 rspec
results_controller.rb
class Api::V1::ResultsController < Api::V1::ApplicationController
before_action :devices
include DataHelper
def show
results = get_dr_results
render json: { data: results }
end
private
def get_dr_results
program_ids = method_defined_in_crucible_helper
end
end
module DataHelper
include Cruciblehelper
def method_missing(method_name, *args, &block)
if condition
do_something
else
super.method_missing(method_name, *args, &block)
end
end
def respond_to_missing?
true
end
end
module CrucibleHelper
def method_defined_in_crucible_helper
end
end
现在在我的 rspec 中,我尝试模拟方法 method_defined_in_crucible_helper。
describe Api::V1::DrResultsController, type: :controller do
describe 'GET #show' do
before do
allow_any_instance_of(CrucibleHelper).to receive(:method_defined_in_crucible_helper) { [utility_program.id, utility_program2.id] }
end
context 'returns data' do
context 'returns expected events' do
it 'should return success response with expected events' do
get :show
expect(JSON.parse(response.body)).to eq(expected_response)
end
end
我得到了
Failure/Error:
def respond_to_missing?
true
end
ArgumentError:
wrong number of arguments (given 2, expected 0)
# ./app/helpers/data_helper.rb:72:in `respond_to_missing?'
如果我注释掉 respond_to_missing?方法,然后我的规格执行正常。有人可以帮我解决这个错误吗?
【问题讨论】:
-
def respond_to_missing?(method_name, include_private = false) -
嗨@LamPhan,请添加您的评论作为详细答案,因为这对我有用。
标签: ruby-on-rails rspec method-missing