2013-08-09 8 views
0

Я создаю веб-сервер RESTful с использованием Goliath-Grape и используя RSpec для TDD. Когда вы вызываете API PUT (/ api/v1/users /: id) для обновления существующей записи из браузера, я получаю ожидаемый ответ 204.Метод PUT return 405 в RSpec для API

Но когда я испытываю тот же вызов API через RSpec я вернусь 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": "[email protected]"}', :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

вы можете использовать сетевой вид браузера (например, в Chrome), чтобы увидеть, как запрос от браузера отличается от запроса вашего теста в. – akonsu

+0

405 метод недоступен, а 'PUT' не указан в ответе. Как выглядит определение ресурса «Grape»? Как вы делаете звонок из браузера (большинство браузеров не поддерживают PUT напрямую, так что вы используете консоль javascript или фреймворк, например jQuery - если это так, то какая тестовая команда работает?) –

+0

Спасибо Нейлу. Я добавил код для моего метода обновления, и я использую Postman (плагин Google Chrome) для запроса PUT (https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=ru) , – kobra

ответ

0

пожалуйста, проверьте:

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