Активная модель отправляет ошибку проверки дважды во время теста в стойке. - PullRequest
2 голосов
/ 28 июля 2011

У меня есть простой API-интерфейс restful rails, настроенный для подачи ответов json, у меня есть модель line.rb, где у меня есть следующие проверки.

validates :title, :presence => true, :length => {:minimum => 3, :maximum => 40},
:appropriate_title => {:message => "cannot have . and /"}
validates :department, :presence => true
validates :owner, :presence => true
validates :account, :presence => true
validate  :unique_inputs
validates :title, :uniqueness => { 
  :scope => :account, 
  :message => 'is already taken for this account', 
  :case_sensitive => false }

В моей спецификации у меня есть следующий набор

 it "with invalid attributes" do
 post"#{url}/#{account.name}.json", :api_key => application.key, :line => {:department => "Survey"}
 --some assertions --
 body = JSON.parse(last_response.body)
 body.should eql({"error"=>{"message"=>"[\"Title can't be blank\", \"Title is too short (minimum is 3 characters)\",]"}})
 end

Как вы можете видеть, поскольку я не добавляю заголовок в строку, это должно было вызвать ошибку проверки и удовлетворить мое утверждение. Однако я получаю одну и ту же ошибку проверки дважды.

  {"error"=>{
    "message"=>"[\"Title can't be blank\", \"Title is too short (minimum is 3 characters)\", \"Title can't be blank\", \"Title is too short (minimum is 3 characters)\"]"
    }}

Это действительно странно, так как в режиме разработки я не получаю эту ошибку проверки дважды. Если вы сомневаетесь, что я что-то не так делаю в своем контроллере, то вот что я имею в своем контроллере

@line = @current_user.lines.new(params[:line])
if @line.save
  respond_with(@line)
else
  render :json => {:error => {:message => @line.errors.full_messages}}
end

Я не могу понять, является ли это ошибкой в ​​тесте стойки или я делаю что-то не так.

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Вы пробовали:

validates :department, :presence => true
validates :owner, :presence => true
validates :account, :presence => true
validate  :unique_inputs
validates :title, :presence => true, 
                  :length => {:minimum => 3, :maximum => 40},
                  :appropriate_title => {:message => "cannot have . and /"},
                  :uniqueness => { 
                    :scope => :account, 
                    :message => 'is already taken for this account', 
                    :case_sensitive => false }
0 голосов
/ 10 августа 2012

Есть ли у вас ассоциации, которые могут привести к двойной проверке?

Вы можете попробовать добавить validate => false например

has_one :account, :validate => false

Я не совсем уверен, почему это происходит, но иногдаассоциации приводят к запуску проверок дважды в одном и том же объекте.Вы можете попробовать проверить это также в консоли, набрав

l = User.last.lines.new(); l.valid?; l.errors
# might return in double errors
l = Line.new(); l.valid?; l.errors
# errors probably just once
...