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
,效果很好!