【问题标题】:SystemStackError - stack level too deep; in Rspec test, using acts_as_audited, Rspec, Database cleanerSystemStackError - 堆栈级别太深;在 Rspec 测试中,使用acts_as_audited、Rspec、数据库清理器
【发布时间】:2015-11-29 11:23:31
【问题描述】:

我遇到了一个奇怪的无限递归,它只出现在 Rspec 测试中。奇怪的是,这是由于向我的用户对象添加了审核,即使它失败的规范实际上与我的用户对象无关

这是它失败的测试。像所有无限递归一样,我没有得到实际的 stracktrace,只有堆栈级别太深失败:

 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 database-cleaner acts-as-audited


    【解决方案1】:

    我将它隔离到我在 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
    

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 2012-01-07
      • 2012-03-04
      • 2013-10-05
      • 2015-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多