Ian Bernatcki
Ian Bernatcki

Reputation: 108

After let(:user) { create(:user) } # => RecordNotFound

I have a test case:

describe User do
  let(:user) { create(:user) } # FactoryGirl
  it { User.count == 1 }  
end

And setup:

RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
  config.before(:suite) { DatabaseCleaner.strategy = :truncation }
  config.before(:each) { DatabaseCleaner.start }
  config.after(:each) { DatabaseCleaner.clean }
  config.use_transactional_fixtures = false
end

Why it is not working? How to use let and got a really persisted records?

Upvotes: 3

Views: 1240

Answers (1)

Gareth
Gareth

Reputation: 138042

let calls are lazy-evaluated, they aren't run unless the specific method is called:

describe User do
  subject { user }
  let(:user) { create(:user) } # FactoryGirl
  it { … }  
end

Alternatively, use let! for preconditions which are always evaluated:

describe User do
  let!(:user) { create(:user) } # FactoryGirl
  it { … }  
end

Upvotes: 5

Related Questions