PUT方法在API的RSpec测试中返回405

时间:2013-08-09 02:05:33

标签: ruby rspec grape goliath

我正在使用Goliath-Grape构建RESTful Web服务器并使用RSpec进行TDD。当进行API PUT调用(/ api / v1 / users /:id)从浏览器更新现有记录时,我得到预期的204响应。

但是当我通过RSpec测试相同的API调用时,我回到405.响应头看起来像这样:

PUT /api/v1/users/:id
{"ALLOW"=>"OPTIONS, POST, GET, HEAD", "CONTENT_TYPE"=>"text/plain", "CONTENT_LENGTH"=>"0", "SERVER"=>"Goliath", "DATE"=>"Fri, 09 Aug 2013 01:37:09 GMT"}

api_spec.rb的代码片段

describe "PUT /api/v1/users/:id" do
  it "update a user and return 204" do
    with_api(Application, api_options) do
      put_request(:path => "/api/v1/users/#{user_id}", :body => '{"user": {"email": "test_again@example.com"}', :head => {'Content-Type' => 'application/json'}) do |c|
        # .....
      end
    end
  end
end

更新方法的代码段:

# Update
put "/:id" do
  if User.where(_id: params['id']).exists?
    User.where(_id: params['id']).update(params['user'])
    status(204)
  else
    error! "Bad Request", 400
  end
end

任何想法为什么它在RSpec测试中打破。

由于

1 个答案:

答案 0 :(得分:0)

请检查:

use Goliath::Rack::Validation::RequestMethod, %w(GET POST PUT DELETE)