没有实现RSPEC错误的控制器测试

时间:2017-06-29 10:47:38

标签: ruby-on-rails ruby rspec mocking rspec-rails

我正在尝试使用RSPEC测试我的API控制器。控制器中的操作有一个我想要存根/模拟的服务。但我得到了错误:

  

失败/错误:期待(Api :: V1 :: PaymentsController).to   接收(:init_alias).and_return(SVC)          Api :: V1 :: PaymentsController没有实现:init_alias

这是我的测试:

  let(:alias_svc) { instance_double(AliasService) }

  describe 'POST /payment/card' do
    it 'returns urls (return, success, fail)' do
      expect(Api::V1::PaymentsController).to receive(:init_alias).and_return(alias_svc)
      expect(alias_svc).to receive(:insert)

      post '/payment/card'
    end
  end

控制器:

module Api
  module V1
    class PaymentsController < ApiController
      before_action :init_alias, only: [:register_card]

      # POST /payment/card
      def register_card
          @url = @svc.insert current_user
      end

      private
      def init_alias
        @svc = AliasService.new
      end

    end
  end
end

修改:

我试图删除第一行(期望(Api :: V1 :: PaymentsController)。接收(:init_alias).and_return(alias_svc))但我得到了

  

失败/错误:期待(svc)。接收(:插入)        (InstanceDouble(AliasService)(匿名))。insert(*(any args))          预期:任何参数1次          收到:0次带有任何参数

1 个答案:

答案 0 :(得分:4)

控制器方法是实例方法。因此,java -jar /path/to/jenkins-cli.jar -s http://127.0.0.1:2206/ install-plugin github-api --username admin --password password 未实施Api::V1::PaymentsController

RSpec允许使用init_alias

expect_any_instance_of

修改

您将邮件发送至expect_any_instance_of(Api::V1::PaymentsController).to receive(:init_alias).and_return(alias_svc) 。因此,您应该将此实例变量模拟到控制器。

您可以这样做:

@svc

More details