Rails 4.2.3测试我的应用程序REST响应

时间:2015-10-07 14:41:45

标签: ruby-on-rails rest http

我正在构建一个响应http请求的应用程序。 到目前为止,检查日志文件和表是可以的。我使用curl发送请求,如:

curl -u test -X POST http://127.0.0.1:3000/api/information -d ''

但现在我包含了某种反应机制。我现在的问题是我必须使用哪个端口作为我的回复? 它是端口80(std http端口)吗?是否有一些CLI工具可以处理会话?

1 个答案:

答案 0 :(得分:0)

端口取决于您的配置以及启动服务器时使用的参数。默认情况下,rails在端口3000上启动 - 在大多数情况下,使用端口80将需要使用sudo。启动rails服务器时,您可以在输出中看到端口。

$ rails server
=> Booting WEBrick
=> Rails 4.2.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server

有几个浏览器扩展名,例如Postman,它们提供了一个用于发送REST请求的GUI - 这比在怪物cURL调用中将它们全部拼凑起来要容易得多。

这对于调试非常有用 - 但手动测试应用程序非常容易出错,并且已知是一种不完整且有缺陷的方法*。相反,您应该考虑使用自动化测试。

RSpec request spec

的示例
# spec/requests/pets_api_spec.rb
require "rails_helper"
RSpec.describe "Pets API", type: :request do

  subject { response }
  let(:json) { JSON.parse(response.body, symbolize_keys: true) }
  let(:pet) { Pet.create(name: 'Spot') }

  describe "viewing a Pet" do
    before { get pet_path(pet) }
    it { should have_http_status :ok }
    it "has the correct JSON response" do
      expect(json[:type]).to eq 'Pet'
      expect(json[:data][:name]).to eq 'Spot'
    end
  end

  describe "creating a Pet" do
    let(:valid_session) do
      # setup session here.
    end

    before do
      post "/pets", { type: 'Pet', data: { name: 'Doge' } }, valid_session
    end
    it { should have_http_status :created }
    # ... 
  end
end