Должны ли rspec matchers: on =>: создать - PullRequest
9 голосов
/ 28 июня 2010

Я использую некоторые из средств сравнения Ifa rspec для тестирования моей модели, один из них:

describe Issue do
  it { should_not allow_value("test").for(:priority) }
end

Моя проблема в том, что моя проверка в моей модели выглядит следующим образом:

validates_format_of :priority, :with => /^(Low|Normal|High|Urgent)$/, :on => :update

Итак, при запуске этого теста я получаю:

1) 'Issue should not allow priority to be set to "test"' FAILED
   Expected errors when priority is set to "test", got errors: category is invalid (nil)title can't be blank (nil)profile_id can't be blank (nil)

Проверка не запускается, потому что она запускается только при обновлении, как я могу использовать эти сопоставления musta при сравнении с обновлениемсоздать?

1 Ответ

12 голосов
/ 21 марта 2011

Я думаю, что должен справиться с этим лучше.Я столкнулся с этим, потому что я хочу выполнить проверку проверки уникальности только для моей модели User при создании новых пользователей.Это пустая трата запроса к базе данных, выполняющего его при обновлении, поскольку я не разрешаю изменять имена пользователей:

validates :username, :uniqueness => { :case_sensitive => false, :on => :create },

К счастью, вы можете обойти это, явно указав «субъект»:

  describe "validation of username" do
      subject { User.new }
      it { should validate_uniqueness_of(:username) }  
  end

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

...