J'essaye de tester mon contrôleur d'API avec RSPEC. L'action dans le contrôleur a un service que je veux stub/mock. Mais je suis erreur:Le test du contrôleur avec l'erreur RSPEC n'implémente pas
Failure/Error: expect(Api::V1::PaymentsController).to receive(:init_alias).and_return(svc) Api::V1::PaymentsController does not implement: init_alias
Voici mon test:
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
Et le contrôleur:
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
Edit:
J'ai essayé de supprimer la première ligne (attend (Api :: V1 :: PaymentsController) .pour recevoir (: init_alias) .et_return (alias_svc)) mais j'ai
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
ça marche presque, merci. Mais j'ai toujours la deuxième erreur – Xero
Passez 'alias_svc' dans' instance_variable_set'. J'ai mis à jour la réponse. – yzalavin