开发者

RSpec Model Validation failing but works fine in Rails Console?

I have been really stuck on this problem. My validation for my model fails (like it should) when I'm testing it out in rails console, but my rspec example fails because it validates anyway (which it shouldn't). What am I missing here or where should I start looking?

Thanks, Ivan

See below:

    ivan:~/Development/ruby/IvanEnviromanRefinery [git:master+]  → bundle exec rspec ../refinerycms-link/
    .............................F.

    Failures:

      1) BlogPost bookmark links must have a link url if it is a link
         Failure/Error: Factory.build(:post,
           expected valid? to return false, got true
         # /Users/ivan/Development/ruby/refinerycms-link/spec/models/blo开发者_运维百科g_post_spec.rb:197:in `block (3 levels) in <top (required)>'

    Finished in 6.56 seconds
    31 examples, 1 failure

    Failed examples:

    rspec /Users/ivan/Development/ruby/refinerycms-link/spec/models/blog_post_spec.rb:196 # BlogPost bookmark links must have a link url if it is a link


    ivan:~/Development/ruby/IvanEnviromanRefinery [git:master+]  → rails console
    Loading development environment (Rails 3.0.9)
    ruby-1.9.2-p180 :001 > b = BlogPost.new
     => #<BlogPost id: nil, title: nil, body: nil, draft: nil, published_at: nil, created_at: nil, updated_at: nil, user_id: nil, cached_slug: nil, custom_url: nil, link_url: nil, is_link: nil, custom_teaser: nil> 
    ruby-1.9.2-p180 :002 > b.title=' 2011-06-24 8:34 '
     => " 2011-06-24 8:34 " 
    ruby-1.9.2-p180 :003 > b.body='goo'
     => "goo" 
    ruby-1.9.2-p180 :004 > b.is_link = true
     => true 
    ruby-1.9.2-p180 :005 > b.valid?
     => false
    ruby-1.9.2-p180 :007 > b.save
     => false 
    ruby-1.9.2-p180 :008 > b.errors
     => {:link_url=>["must have a link_url if is_link is true"]} 
    ruby-1.9.2-p180 :009 > 


    require 'spec_helper'
    Dir[File.expand_path('../../../features/support/factories/*.rb', __FILE__)].each{|factory| require factory}

    describe BlogPost do
      let(:blog_post ) { Factory :post }

      ...

        describe "bookmark links" do
          it "may have a bookmark link" do
           Factory.build(:post,
                        :title => "a link",
                        :body => "link text",
                        :is_link => true,
                        :link_url => "http://example.com").should be_valid
           end
          it "must have a link url if it is a link" do
            Factory.build(:post,
                                 :title => "a link",
                                 :body => "link text",
                                 :is_link => true).should_not be_valid
          end     
        end
    end


Are you certain that in your second expectation the link_url isnt set somehow? Try outputting the value and check the logs

it "must have a link url if it is a link" do
  post = Factory.build(:post,
   :title => "a link",
   :body => "link text",
   :is_link => true)
  Rails.logger.info "Post link: #{post.link_url}"
  post.should_not be_valid
end   
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜