Ошибка проверки в RSpec перед (: каждый) блок имеет странное поведение - PullRequest
0 голосов
/ 14 сентября 2011

ПЕРЕСМОТРЕНО: ошибка была в том, что я хранил несколько разных моделей в одном хеше.Это был внутренний способ того, как я строил массив.В любом случае, я прошу прощения за ошибку здесь.Никто не мог ответить на вопрос так, как я его задал.

Так что у меня есть блок RSpec before (: each) в спецификации контроллера.В моем примере модели есть поле состояния и следующая проверка:

  class Model < ActiveRecord::Base
    STATI = [ "vacant", "deleted", "deactivated"]
    ...
    validates :status, :inclusion => { :in => STATI }
    ...
  end

И в моей спецификации у меня есть следующий код:

  describe Controller do
    ...
    describe "some methods" do
      before(:all) do
        @models = []
        10.times { @models << Factory(:model) }
      end
      before(:each) do
        @models.each { |m| m.update_attributes(:status => "vacant") }
      end
      ...
    end
  end

Когда я запускаю спецификацию, все остальныеописать блоки работают нормально.Вызывает ошибку с эффектом: ActiveRecord :: RecordInvalid: Проверка не удалась: Статус не включен в список и указывает на строку, где написано m.update_attributes (: status => "vacant").

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 30 ноября 2011

Я бы попробовал следующее в определении вашей модели:

class Model < ActiveRecord::Base
  STATI = %w[vacant deleted deactivated]
  ...
  validates :status, :inclusion => STATI
  ...
end

% w является предпочтительным синтаксисом для создания массива строк и позволяет удалить " и , из определения массива.

Вам не нужно :in => для проверки включения.

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