2015-07-17 3 views
0

У меня есть модель, где я проверяю поле условно. Это выглядит следующим образом:Spec validate_uniqueness_of test с условным

validates :case_id, 
     uniqueness: { 
         scope: :user_id, 
         message: 'Message' 
        }, 
     unless: Proc.new { |c| c.user_id.nil? } 

Испытание меня за это, до сих пор, выглядит следующим образом:

it { should validate_uniqueness_of(:case_id) 
       .scoped_to(:user_id) 
       .with_message('Message.') } 

проблемы, я не знаю, как включить, если условно в тесте ?

Любые идеи?

ответ

0

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

context 'when user_id is nil' do 
    before { subject.stub(:user_id) { nil } } 
    it { expect(subject).to_not validate_uniqueness_of(:case_id) } 
    end 
+0

спасибо за это. Но как насчет тестирования, когда user_id не равен нулю? Тестирование, которое вы отправили, будет проверяться, когда оно ноль, но как насчет того, когда это не ноль? Я не могу точно использовать мой существующий тест, чтобы сделать это, поскольку я получаю ошибку из-за условия '' 'if''''. Мне нужен способ объединить тесты. Или, возможно, есть способ переустановить проверку модели? Это кажется более сложным? – JCC

+0

то, что я опубликовал, является дополнением к тому, что у вас уже есть - добавьте его в свои существующие спецификации, и это будет комбинация, о которой вы упомянули выше :) –

+0

Я не могу точно сделать это, поскольку мой первоначальный тест выше дает мне ошибка - «Ошибка/ошибка: это {должно validate_uniqueness_of (: case_id) Ожидаемые ошибки, чтобы включить« Сообщение », когда case_id установлено в 0, не получил ошибок» - Так что добавление ваших не поможет, чтобы исправить это. Единственный способ - как-то включить ваш в мой как один тест. Мой вопрос стоит. – JCC