我有一个模型,需要有效的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的或早该解决方案尝试之前要先进的检测/匹配框架与基本坚持。
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
正确的做法。任何建议。
如果重点放在rails上,我会遵循hartl的建议,使用rspec(这是更易读的imho)和rubular的组合来制作url匹配测试。我不知道TestCase,但你似乎是在正确的轨道上,尽管你可能想尝试一些对正则表达式失败的例子。 – prusswan
好吧,也许我需要跳进RSpec的一部分我认为我需要坚持下来,也许尝试MiniTest。我不知道我会检查你提到的那个教程。谢谢 – alenm
另外,我认为你不应该使用正则表达式来验证URL。使用'before_validation'回调以及'URI.parse'来清除它(删除userinfo,如果它没有一个,则添加该方案,...),然后使用'URI.parse'进行验证以确保URL组件就是你想要的。 –