2016-02-09 89 views
2

我有一個TwitterAPI類定義,它與Twitter的API交互。模塊中的方法進行兩個獨立的API調用。所以我在TwitterAPI類的單元測試中有兩個WebMock stub_request定義在之前的塊中。在Rails集成測試中剔除第三方API調用

我現在在寫基於水豚/ rspec的集成測試。一些測試場景涉及到使用Twitter的API數據頁,例如:

feature 'View Twitter feed,' do 

    let(:twitter_feed_page)  { TwitterFeedPage.new } 
    let(:user)     { FactoryGirl.create :user } 

    scenario "Twitter feed is displayed" do 
    login(user) 
    twitter_feed_page.load 
    expect(twitter_feed_page).to have_text("Test tweet") 
    # etc. 
    end 
end 

我想這些集成測試使用相同的存根數據,我的單元測試。所以stub_requests將在多個測試中共享。我是否應該將我定義的stub_requests移動到rails_helper.rb並且有某種標誌允許特定測試使用存根?還是應該將stub_requests複製/粘貼到集成測試本身?擁有多個存根請求副本不是幹這種方式的方式,但是看起來更容易理解存根如何工作。

+0

您是否整理出來了? – jvillian

回答

1

當重用存根時,我喜歡將它們放入共享文件中。我也喜歡把它們作爲方法來包裝。所以,我可能有一個名爲像stubbing_helper.rbspec文件夾中的文件,看起來像:

# spec/stubbing_helper.rb 
def stub_successful_twitter_feed_load 
    # a stub goes here 
end 

def stub_failed_twitter_feed_load 
    # another stub goes here 
end 

當然,記得requirerails_helper.rb這個文件:

# spec/rails_helper.rb 
... 
require 'rspec/rails' 
# Add additional requires below this line. Rails is not loaded until this point! 
require 'stubbing_helper' 
... 

然後調用相應的存根方法視情況而定:

feature 'View Twitter feed,' do 

    let(:twitter_feed_page)  { TwitterFeedPage.new } 
    let(:user)     { FactoryGirl.create :user } 

    scenario "Twitter feed is displayed" do 
    stub_successful_twitter_feed_load 
    login(user) 
    twitter_feed_page.load 
    expect(twitter_feed_page).to have_text("Test tweet") 
    # etc. 
    end 
end