Использование curl для тестирования маршрутов Rails - PullRequest
3 голосов
/ 06 июня 2011

У меня есть модель с именем users, которую я хочу обновить с помощью API.Я решил сделать это путем создания маршрута обновления и добавления кода, который выполняет обновление.Я создал тест с использованием RSpec, и он, похоже, сработал, однако я действительно хочу увидеть измененные данные в своей базе данных, поэтому я пытался использовать curl для обновления своей базы данных разработки.

Я попробовал команду

curl -X PUT -d "attribute1 = value1, attribute2 = value2" http://localhost:3000/users/1

но я получил ошибку

<code><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Action Controller: Exception caught</title>
<style>
.
.
.
</style>
</head>
<body>

<h1>
NoMethodError
in UsersController#update
</h1>
<pre>You have a nil object when you didn't expect it! You might have expected an    instance of ActiveRecord::Base. The error occurred while evaluating nil.[]
.,,

Вот соответствующая строка в маршрутах. Rb

resources :users, :only => [:create, :update, :destroy]

Вот соответствующий код в контроллере

def update
  @user = User.find(params[:id])

  if params[:user][:attribute1] == ("x" || "y" || "z")
      params[:user][:attribute3] = Time.now
  end

  @user.update_attributes(:user)

  render :nothing => true
end

И наконец вот код спецификации,прошло

describe "PUT 'update'" do
  before(:each) do
      @user = Factory(:user)
  end

  describe "success" do

      it "should be successful" do
          put :update, :id => @user, :user => { :attribute1 => "x", :attribute2 => "xyz"}
          response.should be_success
      end

      it "should update attribute" do
          old_attribute = @user.attribute3
          put :update, :id => @user, :user => { :attribute1 => "x", :attribute2 => "xyz"}
          @user.attribute3 != old_attribute
      end

  end
end

Я пытался найти хорошее руководство по curl, чтобы проверить мой синтаксис, но я мог только найти примеры, поэтому я не слишком уверен, что синтаксис правильный.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

ваши PUT данные должны выглядеть так:

user[attribute1]=value1&user[attribute2]=value2

Аналогично тому, как вы строите параметры в строке запроса URL.

1 голос
/ 06 июня 2011

При вызове curl вы должны будете отправлять свои атрибуты следующим образом: user [name] = John & ... Ты это сделал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...