Я нашел одно специальное средство сравнения musta (в одном из проектов, над которым я работал), которое пытается приблизиться, чтобы проверить что-то вроде этого:
Примеры:
it { should validate_inclusion_check_constraint_on :status, :allowed_values => %w(Open Resolved Closed) }
it { should validate_inclusion_check_constraint_on :age, :allowed_values => 0..100 }
Соответствующеепытается гарантировать, что есть ограничение БД, которое разрывается, когда он пытается сохранить его. Я попытаюсь раскрыть суть идеи.Спички?реализация делает что-то вроде:
begin
@allowed_values.each do |value|
@subject.send("#{@attribute}=", value)
@subject.save(:validate => false)
end
rescue ::ActiveRecord::StatementInvalid => e
# Returns false if the exception message contains a string matching the error throw by SQL db
end
Я полагаю, если мы слегка изменим вышеприведенное, чтобы сказать @subject.save
, и допустим, чтобы валидация Rails взорвалась, мы можем вернуть false, когда строка исключения содержит что-то, что близко соответствует реальному исключениюсообщение об ошибке.
Я знаю, что это далеко от совершенства, чтобы внести свой вклад в проект, но я думаю, что не может быть плохой идеей добавить в свой проект в качестве пользовательского сопоставителя, если вы действительно хотите протестировать многопроверка :inclusion
.