我有点新rspec-mock
,现在我正在集成hominid以与 Mailchimp 通信,我想存根一些方法调用,所以我的请求实际上并没有发送到 Mailchimp。这就是我正在做的
配置/初始化程序/mailchimp.rb
MAILCHIMP = Hominid::API.new(ENV['MAILCHIMP_API_KEY'])
LIST_ID = ENV['MAILCHIMP_LIST_ID']
用户.rb
class User < ActiveRecord::Base
before_create :add_subscription
private
def add_subscription
MAILCHIMP.list_subscribe(LIST_ID, .......) # Some params following
end
end
如您所见,对于创建的每个用户,list_subscribe
都会调用a MAILCHIMP
,现在我不希望list_subscribe
在每个测试中都被实际调用,因为User
到处都在使用,所以我在全局范围内配置了一个像这样的存根:
规范/spec_helper.rb
RSpec.configure do |config|
config.before(:each) do
allow_any_instance_of(Hominid::API).to receive(:list_subscribe).and_return(true)
end
end
我预计MAILCHIMP
instance 不会调用list_subscribe
而只是 return true
,因为如果list_subscribe
被调用,一些意外请求将转到 Mailchimp,我想防止这种情况发生。但是我上面的代码不起作用,我错了什么?如何解决这个问题?
此外,答案可能与我的情况类似How should I stub a method global using RSpec?
我感谢任何帮助和建议?谢谢!