2015-05-08 2 views
1

Недавно обновил кодовую базу до rails4 вместе с драгоценными камнями, теперь мы получаем эту ошибку.shoulda validate_inclusion_of не работает

Failure/Error: it { is_expected.to ensure_inclusion_of(:usage).in_array(['Index', 'Slide', 'Body']).with_message("%{value} is not a valid usage") } 
    ["Index", "Slide", "Body"] doesn't match array in validation 

и здесь соответствующий код модели

USAGES = ['Index', 'Slide', 'Body'] 
validates_inclusion_of :usage, :in => USAGES, :message => "%{value} is not a valid usage" 

Есть ли что-то я не хватает? Я не понимаю, почему это происходит.

ответ

0

должны попробовать это -

validates :usage, inclusion: { :in => %w(Index Slide Body), :message => "%{value} is not a valid usage" } 
+0

переработан в том, что до сих пор не работает; такая же ошибка. –

1

validate_inclusion_of использует allow_value внутренне. Надо признать, что мы должны дать вам лучшее сообщение об ошибке, как к тому, что здесь происходит, но вы должны быть в состоянии написать следующие тесты, чтобы выяснить, что происходит:

it { should allow_value("Index").for(:usage) } 
it { should allow_value("Slide").for(:usage) } 
it { should allow_value("Body").for(:usage) } 

it do 
    should_not allow_value("something else"). 
    for(:usage). 
    with_message("%{value} is not a valid usage") 
end 

Я думаю, что Shoulda-matchers не автоматически интерполируя %{value} внутри вашего сообщения об ошибке. Если это так, то то, что я сделаю (после filing an issue), вытащит сообщение в ключ i18n, а затем передаст имя ключа в with_message.

0

работал для меня -

expect { should validate_inclusion_of(:usage).in?(['a', 'b']) } 
Смежные вопросы