我有以下RSpec测试:
describe 'regular user' do
let!(:organization) { FactoryGirl.create(:full_organization) }
let(:user) { create(:user, organization: organization) }
context 'no access' do
before do
sign_in user
binding.pry # debug
get(suggestions_path)
end
it { expect(response).to have_http_status(:redirect) }
end
end
如果我在没有其他测试的情况下运行它会正常工作,但如果我运行所有测试它就会失败。我不知道怎么会受到影响。我有DatabaseCleaner,具有以下设置:
config.before(:all) do
DatabaseCleaner.clean_with :truncation # clean DB of any leftover data
Rails.application.load_seed
end
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
好的,我们在binding.pry行,我们有一个用户:
$ user.inspect
#<User id: 15, organization_id: 1, (...params...)>
但是,如果我们输入get(suggestions_path)
,则此测试会因此错误而失败:
$ get(suggestions_path)
Module :: DelegationError:用户#used_trial?委托给 organization.used_trial?,但组织是零:用户ID:38, 电子邮件:“person482@example.com”,organization_id:16,(... params ...) 来自... / app / models / user.rb:34:在`救援中 used_trial?“
如果我再次运行它,它可以正常工作:
的get(suggestions_path) =&GT; 302
ID = 38的用户不存在,看起来像是被DatabaseCleaner删除了。但是我不知道为什么它在我得到(suggestions_path)请求时仍然存在。
我尝试过config.cache_classes = false
但它仍然失败:(
答案 0 :(得分:0)
好的,我已经解决了这个问题。
我删除了所有规格,直到我得到此错误的最小设置规格。
然后我尝试逐行删除,直到找到导致此问题的行:那是sign_in user
行。
我在rails_helper.rb中添加了以下代码:
config.after :each do
Warden.test_reset!
end
现在工作正常。