在Rails中,如何在特定的Rspec测试之前加载所有代码?

Ste*_*ore 6 ruby multithreading rspec ruby-on-rails eager-loading

我有一些Rspec测试有时会失败并出现错误:Circular dependency detected while autoloading constant.这些测试是多线程的(rufus-scheduler测试),这显然是自动加载代码的已知问题(http://route.github.io/2013/11/13/rails-autoloading.html).

如果我config.eager_load = true在config/environments/test.rb中设置,我可以让测试始终如一地工作.但是,我担心当它变得越来越大时,这将真正减慢我的测试套件的其余部分.有没有办法为我的多线程测试设置这个eager load选项?

Rails 4.1.4

Tim*_*ins 2

在 { MyApp::Application.eager_load! 之前添加 仅作为此文件/套件的设置。(同意上面的@SterlingParamore)

仅供参考:您需要将其放在before{}描述正文中,而不是松散地放在描述正文中,因为否则每当加载文件时都会发生这种情况(例如,即使您正在加载该文件,但使用标签来定位另一个规范,例如rspec spec --tag=focus) 。

config.eager_load = truetest.rb 配置中的设置减慢首次测试的时间,除非您使用 Spring(毕竟 Spring 的设计目的是在后续测试运行中加快首次测试的时间)。然而,如果您使用 Spring,可能值得交叉引用https://github.com/rails/spring/issues/519,尽管这涉及到一个完全不同的急切加载问题。*