2010-10-23 2 views
3

Я работаю над тестовыми корпусами Rails 3. Во время написания случай я получил ошибку Deprecation какрельсы 3 тестовый пример error.on (: field) Vs. errors [: field]

DEPRECATION WARNING: Errors#on have been deprecated, use Errors#[] instead. 
Also note that the behaviour of Errors#[] has changed. Errors#[] now always returns an Array. An empty Array is returned when there are no errors on the specified attribute. (called from on at /usr/local/lib/ruby/gems/1.9.1/gems/activemodel-3.0.0.rc/lib/active_model/deprecated_error_methods.rb:7) 

Для этого я использовал ошибки [: поля] вместо errors.on (: поле) Теперь ушла Deprecation ошибка, но случаи не работают, как раньше он работал , Он не испытывая никакой валидации для модели

Sol

+0

то, что вы спрашиваете? – shingara

+0

вопрос is errors.on (: field) в rails unit test при показе ошибки устаревания и ошибок [: поле] не работает должным образом .. есть ли способ решить эту проблему. –

ответ

7

После поиска примеров того, как сделать это, не найдя ничего, что я в конечном итоге делает:

errors[:field].present?/errors[:field].blank? 

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

+1

ошибки [: field] .blank? работал на меня - спасибо – shedd

2

Я преобразовать свои старые функции на что-то вроде этого, чтобы удалить предупреждение устаревания:

model.should have(1).error_on(:field) 
    model.should have(:no).errors_on(:field) 
4

Я использую что-то вроде этого в данный момент:

@hamburger.errors[:ingredients].count.should == 1 
@hamburger.errors[:ingredients].should include "Tomatoes are missing dude!" 

Надеется, что это поможет кому-то, сейчас это самое чистое решение для меня.