首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby TestUnit、录像机和HTTP API请求

Ruby TestUnit、录像机和HTTP API请求
EN

Stack Overflow用户
提问于 2013-01-31 01:05:05
回答 1查看 407关注 0票数 2

我正在构建一个API包装器,并且正在为它编写一些测试,我有几个问题。

1)如何为不存在数据的调用编写assert?例如,使用API通过id查找成员,但用户还不存在。

2)如何编写测试PUTDELETE请求的assert

我已经掌握了测试GETPOST请求,只是不确定其他两个动词。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-31 05:42:22

关于你的问题,第一部分...

对于不存在的数据,您有几个选择:

  1. 您可以提前创建数据,例如,通过使用测试种子文件、夹具或工厂。对于具有更复杂数据安排的大型项目,我喜欢这种选择。我也喜欢这种让事情首先正常工作的选择,因为它更容易看到数据。
  2. 你可以创建一个测试替身,比如存根方法或伪对象。我喜欢这种选择,因为它具有最快的测试性能和最好的隔离度。对于最快的测试,我会尽可能早地截取调用。折衷是我不做端到端测试。

关于你的问题第2部分...

你应该编辑你的问题以显示你的实际代码;这将帮助这里的人回答你。

你的录像机代码是这样的吗?

代码语言:javascript
复制
VCR.use_cassette('test_unit_example') do
  response = Net::HTTP.get_response('localhost', '/', 7777)
  assert_equal "Hello", response.body
end

如果是这样,则将HTTP get更改为put,如下所示:

代码语言:javascript
复制
uri = URI.parse(...whatever you want...)
json = "...whatever you want..."
req = Net::HTTP::Put.new(uri)
req["content-type"] = "application/json"
req.body = json
request(req)

HTTP delete也一样:

代码语言:javascript
复制
Net::HTTP::Delete.new(uri)

这里摘录的http://www.rubyinside.com/nethttp-cheat-sheet-2940.html>Net::HTTP小抄是一篇很好的博客文章:

代码语言:javascript
复制
# Basic REST.
# Most REST APIs will set semantic values in response.body and response.code.
require "net/http"

http = Net::HTTP.new("api.restsite.com")

request = Net::HTTP::Post.new("/users")
request.set_form_data({"users[login]" => "quentin"})
response = http.request(request)
# Use nokogiri, hpricot, etc to parse response.body.

request = Net::HTTP::Get.new("/users/1")
response = http.request(request)
# As with POST, the data is in response.body.

request = Net::HTTP::Put.new("/users/1")
request.set_form_data({"users[login]" => "changed"})
response = http.request(request)

request = Net::HTTP::Delete.new("/users/1")
response = http.request(request)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14609615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档