我有一个需要有效格式的网址的模型。
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
是否正确。任何建议。
答案 0 :(得分:2)
这不是正确的方法,因为您根本没有测试Event
验证。相反,常见的模式是创建一个具有属性的对象,该属性将触发验证错误并断言已引发验证异常。所以,在你的情况下:
assert_raise(ActiveRecord::RecordInvalid) do
@event = Event.create!(@event_attributes.merge(:url => "htp:/domain"))
end
Rspec是好的,所以你应该在某个时候尝试,并且我认为早于晚些时候。还有一个很好的库,用于您使用的@event_attributes.merge
模式:它被称为factory_girl。看看它,它会省去一些麻烦。