2016-05-29 7 views
0

は、私が今、私はMailchimpと通信するhominidを統合しています、rspec-mockにちょっと新たなんだ、私は私の要求が実際にMailchimpに行かないので、いくつかのメソッド呼び出しをスタブしたいです。ここで私は

のconfig/initilizers/mailchimp.rbをやっている

MAILCHIMP = Hominid::API.new(ENV['MAILCHIMP_API_KEY']) 
LIST_ID = ENV['MAILCHIMP_LIST_ID'] 

user.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今私はUserはどこでも使用されたため、実際にすべてのテストに呼ばれたlist_subscribeをしたくないので、私は設定ファイル、MAILCHIMPを呼び出すになります世界的にこのようなスタブ:私はlist_subscribeが呼び出された場合、いくつかの予期しない要求はに行きますので、list_subscribeを呼び出すちょうどtrueを返さないMAILCHIMPインスタンスを期待

RSpec.configure do |config| 
    config.before(:each) do 
    allow_any_instance_of(Hominid::API).to receive(:list_subscribe).and_return(true) 
    end 
end 

スペック/ spec_helper.rb Mailchimp、私はこれを防止したい。しかし、私の上記のコードは動作しません、私は間違っていますか?これを修正するには?

また、その答えは、私は任意のヘルプ&提案に感謝おそらくここに私の場合How should I stub a method globally using RSpec?

に似ていますか?ありがとう!

答えて

3

あなたが各テストの前に実行されますconfig.before(:each) do内に含まれなかったコード - 否や。ただし、イニシャライザのコードは、いずれかのテストケースが実行される前に一度実行されます。

Hominid::APIのインスタンスはMAILCHIMPに格納されており、スタブへの命令の影響を受けていないことを意味します。Hominid::API.new - これは完全に機能しています。

あなたにもMAILCHIMPにスタブを配置する必要があります。

config.before(:each) do 
    allow_any_instance_of(Hominid::API).to receive(:list_subscribe).and_return(true) 
    allow(MAILCHIMP).to receive(:list_subscribe).and_return(true) 
end