Jakub Kopyś
Jakub Kopyś

Reputation: 710

Rails RSpec random db

I am trying to figure out RSpec and have some problems. When I run my basic test:

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

It looks like I have some more mysterious posts in the db: Failures:

  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">]

Do You know what is the cause of this problem?

Upvotes: 1

Views: 110

Answers (1)

Mihai Dinculescu
Mihai Dinculescu

Reputation: 20033

RSpec usually goes hand in hand in hand with Database Cleaner.

This gem ensures that your database properly resets between tests. Below you can find a standard config script for it.

# 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

Upvotes: 1

Related Questions