Я пытаюсь написать жемчужину рельсов, которая включает (помимо прочего) некоторые пользовательские валидаторы моделей ... и мне интересно, как протестировать опции валидации.
Чтобы привести пример, я хотел бы написать тест rspec, для которого пустое поле возвращает действительное значение, если опция allow_nil имеет значение true, а в противном случае недопустимое. Код работает нормально, но я не могу придумать элегантный способ проверить его. Сам код:
Module ActiveModel
module Validations
module ThirstyVals
class ValidatePrime < EachValidator
# Validate prime numbers
def validate_each(record, attr_name, value)
return if options[:allow_nil] && value.strip.length == 0
# Other validation code here
# ...
end
end
end
end
end
В настоящее время я тестирую через фиктивный проект, и это нормально, но единственный способ проверить параметр: allow_nil - это написать новый атрибут с набором: allow_nil и проверить его функциональность ... что кажется излишним и довольно не элегантным. Должен быть более изящный способ - любые идеи приветствуются. (Другие тесты ниже для потомства)
# ...
before(:each) do
@entry = Entry.new
end
describe "it should accept valid prime numbers" do
['7', '13', '29'].each do |n|
@entry.ticket = n
@entry.valid?('ticket').should be_true
end
end
describe "it should reject non-prime numbers" do
['4', '16', '33'].each do |n|
@entry.ticket = n
@entry.valid?('ticket').should be_false
end
end