0

考虑一个 Rails 应用程序,它使用与 Rails 应用程序分开开发的(Sinatra 应用程序)API。我想从 Rails 测试中测试 API 调用。

API 代码:

post '/foo/create' do
  ...

我创建了一个模拟,但这没有意义,因为它只是 API 文件的副本。臭死了。

可以在测试中要求 API 文件。但是如何从 RSpec 中调用它呢?Rails 应用程序中没有针对它的路线。

一种选择是启动 API 并从 Rails 测试中进行 HTTP 调用,但这很糟糕,因为:

  1. 您必须启动 API 服务器才能运行 Rails 测试
  2. 为什么 Rails 测试应该发出 HTTP 请求?Rack::Test 模拟了这一点。
  3. 我认为这不会起作用,因为这些应用程序具有不同的测试数据库,但共享相同的生产数据库。

编辑:测试的重点是 API 调用会创建 Rails 应用程序所期望的记录。所以 Rails 应用需要在 API 调用后测试数据库的状态。

4

1 回答 1

1

好。对您来说,完美的答案是像webmock这样模拟答案的宝石。它会在访问该 url 时伪造响应,因此在测试中,您的应用程序将按照真实情况进行请求,只是在它进入网络之前,它会命中您的模拟并以所需的答案进行响应。

于 2012-12-04T18:15:39.830 回答