Ruby on rails RSpec测试具有条件的销毁操作
我正在尝试测试一个具有条件的销毁操作,如果我只调用业务而不调用以下参数,则效果良好:Ruby on rails RSpec测试具有条件的销毁操作,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在尝试测试一个具有条件的销毁操作,如果我只调用业务而不调用以下参数,则效果良好: def destroy if @message_rule.destroy Messages::Reclassifier.call end def destroy if @message_rule.destroy Messages::Reclassifier.call(allowed_params[:message]) end 但如果我这样做: def
def destroy
if @message_rule.destroy
Messages::Reclassifier.call
end
def destroy
if @message_rule.destroy
Messages::Reclassifier.call(allowed_params[:message])
end
但如果我这样做:
def destroy
if @message_rule.destroy
Messages::Reclassifier.call
end
def destroy
if @message_rule.destroy
Messages::Reclassifier.call(allowed_params[:message])
end
它会返回以下错误:
Failures:
1) MessageRulesController#destroy When the message_rule has been destroyed classifies the messages
Failure/Error: expect(Messages::Reclassifier).to have_received(:call)
(Messages::Reclassifier (class)).call(*(any args))
expected: 1 time with any arguments
received: 0 times with any arguments
# ./spec/controllers/message_rules_controller_spec.rb:108:in `block (4 levels) in <top (required)>'
我的规格有什么问题吗?我没有RSpec方面的经验,因此我很难理解这个错误。错误是RSpec希望调用方法
call
,但没有调用该方法。这意味着有什么东西阻止了方法调用的发生。您似乎已正确设置了方法存根
由于您在不带参数选项的情况下存根Messages::rescrimiter#call
,因此无论您是否将参数传递给Messages::rescrimiter#call
,Rspec都不重要。但是,如果allowed_params[:message]
参数导致了类似异常的情况,那就很重要了
你能提供整个控制器类或至少所有与“销毁”操作相关的代码吗?既然你提到了
允许的参数[:message]
似乎引起了一些问题,我决定用它进行实验,结果是,由于allowed_params
仅通过请购单发送参数,销毁操作没有向请购单发送任何内容,因此我将其替换为@message_rule.message
,效果很好!