rspec vs'url_validation'宝石

时间:2013-01-11 16:57:13

标签: ruby-on-rails-3 validation rspec2

我正在努力将rspec作为一个新的Rails人员,我需要验证传递给Active Record的URL。这可能是由于我的无知所以请指出我正确的方向。 video_url是一个字符串字段,我想将其验证为有效的URL。环顾四周,我选择了这个宝石,因为它似乎在rspec中进行了全面测试。对于我的测试,我没有看到如何将他的验证测试纳入我的模型测试。

在rails控制台中,我创建了一个Post对象,并确保如果我放置一个我知道找不到的虚假URL,我会收到错误。奇怪的是,在安装了gem的测试中尝试复制它会导致测试失败,因为它没有发现任何错误。当我进入控制台时,我预计会出现某种错误。我的问题是我做错了什么,因为它没有错误?我曾多次尝试对可能导致它的东西进行三角测量,但宝石似乎在rspec中不起作用?我本以为如果我能在控制台中使用它,我可以让它在rspec中工作吗?

post.rb

 class Post < ActiveRecord::Base
   attr_accessible :body, :title, :image, :video_title, :video_url
   validates_presence_of :title, :body, :author
   validates :video_url, :presence => true, :if => :video_title_present?, :url => { 
        :check_path => [ 300..399, 400..499, 500..599 ], :allow_nil => true,
        :url_not_accessible_message => "must be valid.",
        :invalid_url_message => "must be valid.",
        :url_invalid_response_message => "must be valid."}

   def video_title_present?
     !self.video_title.blank?
   end
   belongs_to :author, class_name: "User"
 end

post_spec.rb

 before do
   @post = Post.new(title: "foo", body: "my body here")
 end

 describe "validates with video links" do
   it "validates with video url and video title" do
     @post.video_url = "http://heckitoqi.com"
     @post.video_title = "my title"
     @post.should have_at_least(1).error_on(:video_url)
   end
 end

控制台输出:

 Failure/Error: @post.should have_at_least(1).error_on(:video_url)
 expected at least 1 error on :video_url, got 0

在我的一些错误中,我尝试了一个更开放的错误,但由于没有捕获任何错误而失败。

以下是使用Rails控制台对模型进行烟雾测试的简短版本:

 u = User.first
 p = Post.new(title: "title", body: "body", video_title: "vtitle", video_url: "http://heckitoqi.com")
 p.author = u
 p.save!

 >> HTTPI GET request to heckitoqi.com (net_http)
 >> ActiveRecord::RecordInvalid: Validation failed: Video url must be valid.

如果我可以在控制台中验证它,那么我的测试实施是错误的,对吧?我只是看不出我做错了什么。 thanx,sam

0 个答案:

没有答案