【发布时间】:2017-06-29 10:47:38
【问题描述】:
我正在尝试使用 RSPEC 测试我的 API 控制器。控制器中的操作有一个我想要存根/模拟的服务。但我得到了错误:
失败/错误:expect(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
编辑:
我试图删除第一行 (expect(Api::V1::PaymentsController).to receive(:init_alias).and_return(alias_svc)) 但我得到了
失败/错误:expect(svc).to receive(:insert) (InstanceDouble(AliasService) (匿名)).insert(*(any args)) 预期:1 次,带任何参数 收到:0 次带任何参数
【问题讨论】:
标签: ruby-on-rails ruby rspec mocking rspec-rails