我定义了一个TwitterAPI
类,它与Twitter的API交互。 模块中的方法进行两个单独的 API 调用。 因此,我在TwitterAPI
类的单元测试中定义了两个 WebMock stub_request
。
我现在正在编写基于水豚/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 方法,但似乎更容易阅读/理解存根的工作原理。
重用存根时,我喜欢将它们放在共享文件中。我也喜欢将它们包装为方法。因此,我的spec
文件夹中可能有一个名为 stubbing_helper.rb
的文件,如下所示:
# 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
当然,请记住在rails_helper.rb
中require
此文件:
# 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