gpt4 book ai didi

ruby - stub HTTP 请求的目的是什么(例如使用 WebMock gem)?

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:05 24 4
gpt4 key购买 nike

作为先驱,仅供引用,我是一名崭露头角的开发人员。我正在尝试为 Ruby gem 的 http POST 方法编写测试。据我所知,当你 stub 一个 http 响应时,例如使用 Ruby WebMock gem,你基本上是在告诉它要发布什么,然后人为地告诉它要用什么来响应。例如,这是我要测试的代码:

## githubrepo.rb

module Githubrepo

include HTTParty

def self.create(attributes)

post = HTTParty.post(
'https://api.github.com/user/repos',

:headers => {
'User-Agent' => 'Githubrepo',
'Content-Type' => 'application/json',
'Accept' => 'application/json'
},

:basic_auth => {
:username => attributes[:username],
:password => attributes[:password]
},

:body => {
'name' => attributes[:repository],
'description' => attributes[:description]
}.to_json
)

Githubrepo.parse_response_from(post, attributes[:wants_ssh])

end

我的 RSpec 测试在我写的时候失败了:

Githubrepo.create(:repository => 'test', :username => 'test_user', :password => '1234')

因为它发出真正的 HTTP 请求。它建议我改为执行以下操作:

        stub_request(:post, "https://test_user:test_password@api.github.com/user/repos").
with(:body => "{\"name\":\"test_repo\",\"description\":null}",
:headers => {'Accept'=>'application/json', 'Content-Type'=>'application/json', 'User-Agent'=>'Githubrepo'}).
to_return(:status => 200, :body => "", :headers => {})

但对我来说,这似乎毫无意义,因为它基本上是在告诉发送什么和响应什么。我可以编辑 URL 以显示 "https://bananas@git-banana.banana"header 以显示 Content-type => 'Rumplestilskin' 并且 RSpec 可以接受。我应该如何将其集成到测试上面指定的 create 方法的功能中?或者,如果有的话,有人可以指出可靠的初学者指南或博客来帮助我解决这个问题吗? Ruby gem 自述文件似乎假设用户已经知道一两件事,而我不知道。

最佳答案

正如 Steve 在评论中提到的那样,此类测试的重点不是测试外部 API,而是您处理和解析响应的代码是否正确。

如对此问题的评论中所讨论的,检查 VCR gem 以“记录”API 响应以确保您的代码正确处理它们:https://github.com/vcr/vcr

关于ruby - stub HTTP 请求的目的是什么(例如使用 WebMock gem)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316330/

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