gpt4 book ai didi

Ruby TestUnit、VCR 和 HTTP API 请求

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:37 24 4
gpt4 key购买 nike

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

1) 如何为数据不存在的调用编写断言?例如,使用 API 通过 id 查找成员,但该用户尚不存在。
2) 如何编写用于测试 PUTDELETE 请求的 assert

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

最佳答案

对于您的问题第 1 部分...

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

  1. 您可以提前创建数据,例如使用测试种子文件、夹具或工厂。对于具有更复杂数据安排的大型项目,我喜欢这种选择。我也喜欢这种先让事情运转起来的选择,因为这样可以更直接地查看数据。

  2. 您可以创建一个测试替身,例如 stub 方法或假对象。我喜欢这个选择,以获得最快的测试性能和最好的隔离。为了最快的测试,我会尽早拦截调用。代价是我没有进行端到端测试。

对于您的问题第 2 部分...

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

你的VCR代码是这样的吗?

VCR.use_cassette('test_unit_example') do
response = Net::HTTP.get_response('localhost', '/', 7777)
assert_equal "Hello", response.body
end

如果是这样,您更改要放置的 HTTP get,如下所示:

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 删除相同:

Net::HTTP::Delete.new(uri)

http://www.rubyinside.com/nethttp-cheat-sheet-2940.html>Net::HTTP 备忘单摘自此处:

# 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)

关于Ruby TestUnit、VCR 和 HTTP API 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14609615/

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