gpt4 book ai didi

ruby-on-rails - 带有 RSPEC 错误的 Controller 测试未实现

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:46 24 4
gpt4 key购买 nike

我正在尝试使用 RSPEC 测试我的 API Controller 。 Controller 中的操作有一个我想 stub /模拟的服务。但是我得到了错误:

Failure/Error: expect(Api::V1::PaymentsController).to receive(:init_alias).and_return(svc) Api::V1::PaymentsController does not implement: 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

和 Controller :

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)) 但我得到了

Failure/Error: expect(svc).to receive(:insert) (InstanceDouble(AliasService) (anonymous)).insert(*(any args)) expected: 1 time with any arguments received: 0 times with any arguments

最佳答案

Controller 方法是实例方法。因此,Api::V1::PaymentsController 没有实现 init_alias

RSpec 允许使用expect_any_instance_of:

expect_any_instance_of(Api::V1::PaymentsController).to receive(:init_alias).and_return(alias_svc)

编辑

您将消息发送至 @svc。因此,您应该将此实例变量模拟到您的 Controller 。

你可以这样做:

let(:alias_svc) { instance_double(AliasService) }
controller.instance_variable_set(:@svc, alias_svc)

More details .

关于ruby-on-rails - 带有 RSPEC 错误的 Controller 测试未实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44823053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com