Rails RSpec随机数据库

时间:2016-04-19 12:44:45

标签: ruby-on-rails ruby ruby-on-rails-4 rspec

我想找出RSpec并遇到一些问题。 当我进行基本测试时:

require 'rails_helper'

describe Post do

  before do
    @post = Post.create!(title: 'foobar1', content: 'foobar'*5)
  end

  it 'orders by creation date' do
    @new_post = Post.create!(title: 'foobar1', content: 'foobar'*5)
    Post.order('created_at desc').all.to_a.should == ([@new_post, @post])
  end
end

看起来我在db中有一些更神秘的帖子: 故障:

  1) Post orders by creation date
     Failure/Error: Post.order('created_at desc').all.to_a.should == ([@new_post, @post])

       expected: [#<Post id: 980190990, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">, #<Post id: 980190989, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">]
            got: [#<Post id: 980190990, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">, #<Post id: 980190989, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">, #<Post id: 980190962, title: nil, content: nil, created_at: "2016-04-19 11:59:56", updated_at: "2016-04-19 11:59:56">, #<Post id: 298486374, title: nil, content: nil, created_at: "2016-04-19 11:59:56", updated_at: "2016-04-19 11:59:56">] (using ==)
       Diff:
       @@ -1,3 +1,5 @@
        [#<Post id: 980190990, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">,
       - #<Post id: 980190989, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">]
       + #<Post id: 980190989, title: "foobar1", content: "foobarfoobarfoobarfoobarfoobar", created_at: "2016-04-19 12:38:50", updated_at: "2016-04-19 12:38:50">,
       + #<Post id: 980190962, title: nil, content: nil, created_at: "2016-04-19 11:59:56", updated_at: "2016-04-19 11:59:56">,
       + #<Post id: 298486374, title: nil, content: nil, created_at: "2016-04-19 11:59:56", updated_at: "2016-04-19 11:59:56">]

你知道这个问题的原因是什么吗?

1 个答案:

答案 0 :(得分:1)

RSpec通常与Database Cleaner齐头并进。

此gem确保您的数据库在测试之间正确重置。您可以在下面找到它的标准配置脚本。

# spec/rails_helper.rb
require 'database_cleaner'

RSpec.configure do |config|
  config.use_transactional_fixtures = false

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do |example|
    DatabaseCleaner.strategy = example.metadata[:js] ? :truncation : :transaction
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end
end