我正在尝试测试我的控制器只是调用服务对象上的方法。我认为测试间谍对此非常完美。我究竟做错了什么?谢谢你的帮助!
控制器:
class PostsController < ApplicationController
def create
@post = Post.new(post_params)
if @post.save
ServiceObject.new(@post).call
redirect_to posts_path, success: "#{@post.title} was successfully created."
else
render action: :new
end
end
end
服务对象:
class ServiceObject
def initialize(post)
@post = post
end
def call
puts "Service object was called!"
end
end
控制器测试:
require 'spec_helper'
describe PostsController do
describe 'POST #create' do
it 'calls the service object' do
service_object = double(ServiceObject)
service_object.stub(:new).and_return(service_object)
service_object.stub(:call)
post :create, post: Fabricate.attributes_for(:post)
expect(service_object).to have_received(:call)
end
end
end
错误:
Failure/Error: expect(service_object).to have_received(:call)
(Double ServiceObject).call(any args)
expected: 1 time with any arguments
received: 0 times with any arguments
答案 0 :(得分:1)
试试这个:
require 'spec_helper'
describe PostsController do
describe 'POST #create' do
let(:service_object) { double(:service_object) }
before do
ServiceObject.stub(:new).and_return(service_object)
service_object.stub(:call)
end
it 'calls the service object' do
post :create, post: Fabricate.attributes_for(:post)
expect(service_object).to have_received(:call)
end
end
end