Ошибка проверки модели RSpec, но она отлично работает в консоли Rails?

Я действительно застрял в этой проблеме. Моя проверка моей модели завершается неудачно (как и должно быть), когда я тестирую ее в консоли rails, но мой пример rspec терпит неудачу, потому что он все равно проверяется (чего не должно быть). Что мне здесь не хватает или с чего мне начать искать?

Спасибо, Иван

Увидеть ниже:

    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

person Ivan    schedule 24.06.2011    source источник
comment
что у тебя в модели?   -  person apneadiving    schedule 25.06.2011
comment
На самом деле я только что заработал, используя вместо этого .should be_invalid, но я понятия не имею, почему. Вот суть модели: gist.github.com/1046125   -  person Ivan    schedule 25.06.2011


Ответы (1)


Вы уверены, что в вашем втором ожидании link_url каким-то образом не установлен? Попробуйте вывести значение и проверьте логи

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   
person agmcleod    schedule 24.06.2011
comment
Да, link_url не задан, это ноль. Я попытался добавить операторы puts и awesome_print для проверки значений. даже избавился от завода и создал модель. по какой-то причине, когда я в rspec, это все .valid? правда! - person Ivan; 25.06.2011
comment
теперь он работает с использованием .should be_invalid. По какой-то причине это работает вместо .should_not be_valid - person Ivan; 25.06.2011
comment
и теперь он работает оригинальным способом. возможно, перезапуск spork помог. борется со спорком! - person Ivan; 25.06.2011
comment
@Ivanoats ... У меня была очень странная проблема ... все работает в консоли, а не в Rspec ... просто нужно было перезапустить spork! ... - person citraL; 14.11.2012