作为前身仅供参考,我是一个崭露头角的开发人员。我正在尝试为 Ruby gem 的 http POST 方法编写测试。据我所知,当您存根 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 to say"https://bananas@git-banana.banana"
和header
to sayContent-type => 'Rumplestilskin'
并且 RSpec 可以。我应该如何将其集成到测试create
我上面指定的方法的功能中?或者,如果有的话,有人可以指点我一个可靠的初学者指南或博客来帮助我解决这个问题吗?Ruby gem READMEs 似乎假设用户已经知道一两件事,而我不知道。