gpt4 book ai didi

ruby-on-rails - 在 Rails 集成测试中 stub 第 3 方 API 调用

转载 作者:行者123 更新时间:2023-12-04 05:39:26 26 4
gpt4 key购买 nike

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

我现在正在编写基于 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 数据。所以 stub_requests 将在多个测试之间共享。我是否应该将我定义的 stub_requests 移动到我的 rails_helper.rb 并有某种标志允许特定测试使用 stub ?或者我应该将 stub_requests 复制/粘贴到集成测试本身吗?拥有 stub 请求的多个副本并不是执行此操作的 DRY 方法,但它似乎更容易阅读/理解 stub 的工作原理。

最佳答案

当重用 stub 时,我喜欢将它们放在一个共享文件中。我也喜欢将它们包装为方法。所以,我的 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.rbrequire 这个文件:

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

然后根据需要调用合适的 stub 方法:

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

关于ruby-on-rails - 在 Rails 集成测试中 stub 第 3 方 API 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35303701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com