在let(:user){create(:user)}#=> RecordNotFound之后

Ian*_*cki 3 rspec ruby-on-rails factory-bot

我有一个测试用例:

describe User do
  let(:user) { create(:user) } # FactoryGirl
  it { User.count == 1 }  
end
Run Code Online (Sandbox Code Playgroud)

并设置:

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
Run Code Online (Sandbox Code Playgroud)

为什么不工作?如何使用let并得到一个真正持久的记录?

Gar*_*eth 5

let 调用是惰性计算的,除非调用特定方法,否则它们不会运行:

describe User do
  subject { user }
  let(:user) { create(:user) } # FactoryGirl
  it { … }  
end
Run Code Online (Sandbox Code Playgroud)

或者,let!用于始终评估的前提条件:

describe User do
  let!(:user) { create(:user) } # FactoryGirl
  it { … }  
end
Run Code Online (Sandbox Code Playgroud)