2016-07-10 13 views
0

私は現在MailChimp APIを使用しており、誰かが購読すると自動的にMailchimpリストに追加します。機能は素晴らしいですが、私がテストを実行すると、サブスクライバを作成することでテストが失敗します。理由は、私はこの失敗メッセージを返すので、私は人々を購読するための動的な工場を持っていないということです[email protected] is already subscribed to the list.それは意味をなさないとMailchimpはすべてを行う必要がありますが私の質問は、私のmailchimpリストを汚染する偽アカウント?私はVCRについて知っていますが、これを処理する他の方法はありますか?どんな助けも素晴らしいだろう。これは直接的な質問よりもアドバイスを探しているところが多いので、コードを見たいと思ったら教えてください。Mailchimpと統合中のRspec

JOB:

class SubscribeUserToMailingListJob < ActiveJob::Base 
    queue_as :default 

    def perform(subscriber) 
    gb = Gibbon::API.new(ENV["MAILCHIMP_API_KEY"]) 
    gb.lists.subscribe({:id => ENV["MAILCHIMP_LIST_ID"], :email => {:email => subscriber.email}, :merge_vars => {:FNAME => subscriber.first_name, :LNAME => subscriber.last_name}, :double_optin => false}) 
    end 
end 

がINITIALIZER:

Gibbon::API.api_key = ENV["MAILCHIMP_API_KEY"] 
Gibbon::API.timeout = 15 
Gibbon::API.throws_exceptions = true 
+0

だけmailchimpためにあなたの要求を嘲笑、幻想@neoを鳴らしVCR – neo

+0

を気しかし、私はレールとRSpecのに新たなんだと率直に言って、私はあなたが意味するか、どのようにそれをどうするか見当がつかないないのですか?私はそれでいくつかの助けを見つけることができる任意のアイデア?申し訳ありませんnewbステータス... – Bitwise

+0

いくつかのコードを表示できますか? – neo

答えて

2

あなたのRSpecの例でこれを試してみてください。

lists = double(:lists) 
allow_any_instance_of(Gibbon::API).to receive(:lists) { lists } 
allow(lists).to receive(:subscribe) { 'successfully subscribed user.' } 

あなたは、あなたが特定したい場合は、同様の引数を指定することができますそれはあなた次第です。

あなたはこのの良い読み取り与える必要があります。https://github.com/rspec/rspec-mocks

1

ネオの答えは良いですが、私は現在の宝石のバージョンに適応してきたが、それはコメントとして読めないですので、私は新しい答えとして、それを投稿しています:

let(:lists) { double(:lists) } 
let(:members) { double(:members) } 

before do 
    allow_any_instance_of(Gibbon::Request).to receive(:lists) { lists } 
    allow(lists).to receive(:members) { members } 
    allow(members).to receive(:create) { 'successfully subscribed user.' } 
end 
+1

私はこのエラーを取得する 'RSpec :: Mocks :: MockExpectationError:Gibbon ::リクエストは#lists'を実装していません – Tachyons

関連する問題