【发布时间】:2014-10-08 14:14:51
【问题描述】:
作为前身仅供参考,我是一名崭露头角的开发人员。我正在尝试为 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 说 "https://bananas@git-banana.banana" 和 header 说 Content-type => 'Rumplestilskin' 和 RSpec 是好的。我应该如何将其集成到测试我上面指定的create 方法的功能中?或者,如果有的话,有人可以指点我一个可靠的初学者指南或博客来帮助我解决这个问题吗? Ruby gem README 似乎假设用户已经知道一两件事,而我不知道。
【问题讨论】:
-
重点不是测试 gihub 的 api 是否有效,重点是确保您的 create 方法正确处理响应。
-
啊,谢谢。如果您打算测试如何解析响应,您如何测试以确保您正确调用 API?由于响应是人为生成的,有没有办法查看您是否正确地进行了调用以生成正确的响应?