У меня есть модель, которая требует действительного формата URL-адреса.Тестирование модуля Как сбой теста для проверки формата URL-адреса
class Event < ActiveRecord::Base
validates_format_of :url, :with => /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix
end
НО ПЕРЕД реализации решения я хочу написать тест, который выходит из строя. Это то, как кто-то собирается писать неудавшийся тест? (Пожалуйста, не решение Rspec или Shoulda не пытается придерживаться основ, прежде чем в передовых рамках тестирования/Сличитель.
class EventTest < ActiveSupport::TestCase
setup do
# These attributes are valid
@event_attributes = { :title => "A title",
:url => "http://somedomain.com/images/land.jpg",}
end
test "should not be valid with an INVALID URL" do
@event = Event.new(@event_attributes.merge(:url => "htp:/domain"))
assert_no_match(/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/ix, @event.url, "Not a valid format")
end
end
ли assert_no_match
правильный подход. Любые предложения.
Если вы сосредоточены на рельсах, я бы рекомендовал рекомендовать hartl использовать комбинацию rspec (которая более читаема imho) и rubular для проверки соответствия URL-адресов. Я не знаю о TestCase, но вы, кажется, на правильном пути, хотя вы можете попробовать еще несколько неудачных примеров против регулярного выражения. – prusswan
Хорошо, может быть, мне нужно прыгнуть в RSpec, часть меня думает, что мне нужно выставить ее и, возможно, попробовать MiniTest. Я не знаю, что проверю этот учебник, о котором вы упомянули. Спасибо – alenm
В стороне, я не думаю, что вы должны использовать регулярное выражение для проверки URL-адреса вообще. Используйте обратный вызов 'before_validation' вместе с' URI.parse', чтобы его очистить (вычеркните userinfo, добавьте схему, если она не указана, ...), а затем снова URI.parse для проверки, чтобы убедиться компоненты URL - это то, что вы хотите. –