3

TwitterAPI定义了一个类,它与 Twitter 的 API 交互。模块中的方法进行两个单独的 API 调用。stub_request因此,我在类的单元测试中的 before 块中定义了两个 WebMock TwitterAPI

我现在正在编写基于 capybara/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 复制/粘贴到集成测试本身?拥有多个存根请求副本并不是执行此操作的 DRY 方式,但似乎更容易阅读/理解存根是如何工作的。

4

1 回答 1

2

重用存根时,我喜欢将它们放在共享文件中。我也喜欢将它们包装为方法。stubbing_helper.rb所以,我的文件夹中可能有一个文件spec,类似于:

# 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

当然,记住require这个文件在rails_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
于 2016-02-10T16:15:37.413 回答