ivanoats
2011-Jun-24 22:21 UTC
[rspec-users] Model Validation fails (correctly) in rails console but not in rspec
Hi, 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/ blog_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
David Chelimsky
2011-Jun-25 11:06 UTC
[rspec-users] Model Validation fails (correctly) in rails console but not in rspec
On Jun 24, 2011, at 5:21 PM, ivanoats wrote:> Hi, 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/ > blog_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 > endI''m guessing the factory is set up to include a link_url. If so, just set :link_url => nil in the second example. If not, I have no idea. HTH, David