SystemStackError-堆栈级别太深;在Rspec测试中,使用acts作为受审核、Rspec、数据库清理器
我遇到了一个奇怪的无限递归,它只出现在Rspec测试中。奇怪的是,这是因为在我的用户对象中添加了审计,尽管它失败的规范实际上与我的用户对象无关 这是它失败的测试。像所有无限递归一样,我没有得到实际的stracktrace,只有堆栈级别太深的故障:SystemStackError-堆栈级别太深;在Rspec测试中,使用acts作为受审核、Rspec、数据库清理器,rspec,database-cleaner,acts-as-audited,Rspec,Database Cleaner,Acts As Audited,我遇到了一个奇怪的无限递归,它只出现在Rspec测试中。奇怪的是,这是因为在我的用户对象中添加了审计,尽管它失败的规范实际上与我的用户对象无关 这是它失败的测试。像所有无限递归一样,我没有得到实际的stracktrace,只有堆栈级别太深的故障: 1) Spree::CheckoutController order in address state #update payment to complete step should set the address id on a newly cre
1) Spree::CheckoutController order in address state #update payment to complete step should set the address id on a newly created credit card; does not regress https://www.pivotaltracker.com/story/show/84864964
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
# /Users/jason/.rvm/gems/ruby-2.1.5/gems/activerecord-4.1.11/lib/active_record/connection_adapters/abstract/database_statements.rb:212
我将其隔离到Rspec中的after hook,它是根据数据库清理器设置配置的,如下所示:
config.after(:each) do
DatabaseCleaner.clean
Warden.test_reset!
end
config.after(:each) do
Spree::User.auditing_enabled = false # disable acts_as_audited during database cleanup
DatabaseCleaner.clean
Warden.test_reset!
end
修复方法只是关闭对我的用户模型的审核,如下所示:
config.after(:each) do
DatabaseCleaner.clean
Warden.test_reset!
end
config.after(:each) do
Spree::User.auditing_enabled = false # disable acts_as_audited during database cleanup
DatabaseCleaner.clean
Warden.test_reset!
end