我有一個模型,需要有效的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組件就是你想要的。 –