每当我为我的Rails应用程序运行rspec测试时,在实际开始运行测试之前需要花费一天的时间和一天的开销。为什么rspec这么慢?有没有办法加速Rails的初始加载或单独输出我需要的Rails应用程序的部分(例如,只有ActiveRecord的东西)所以它不会加载绝对的所有内容来运行一些测试?
答案 0 :(得分:32)
我绝对建议查看spork。
railstutorial专门解决了这个问题,并给出了一个解决方法,让spork在rails 3.0中运行得很好(截至目前,spork不是开箱即用的3)。当然,如果你没有使用rails 3.0,那么你应该很高兴。
本教程的一部分展示了如何在rails 3.0中运行spork
http://railstutorial.org/chapters/static-pages#sec:spork
检查spork是否已准备好rails 3.0
答案 1 :(得分:22)
您应该可以通过在单独的终端窗口中运行script/spec
来加快script/spec_server
来电,然后在规范调用中添加额外的-X
参数。
答案 2 :(得分:4)
为什么rspec这么慢?因为它会加载所有环境,加载灯具和所有爵士乐。
有没有办法加速Rails的初始加载你可以尝试使用模拟而不是依赖数据库,这对于单元测试来说实际上是正确的,并且肯定会加速你的单元测试。另外使用@ Scott Matthewman提到的规范服务器可以提供帮助,与@ Marc-Andre Lafortune提到的zentest自动测试相同
有没有办法找出我需要的Rails应用程序部分(例如只有ActiveRecord的东西),所以它不会加载所有的东西来运行一些测试?这个怎么样
rake test:recent
我不确定rspec任务是如何与此集成的,但你绝对可以使用测试:最近的任务作为模板来做同样的rspec测试,如果是。
rake test:rspec:recent
尚不存在
答案 3 :(得分:4)
因为它会加载所有环境,加载灯具和所有爵士乐。
真正的罪魁祸首是如果你使用rake spec
,it runs the db:test:prepare
task来运行它。
此任务将删除整个测试数据库并从头开始重新创建。这对我来说似乎很荒谬,但这就是它的作用(当你运行rake:test:units
等时会发生同样的事情。)
您可以使用rspec作为rspec gem的一部分安装的spec
应用程序轻松解决此问题。
像这样:
cd railsapp
spec spec # run all specs without rebuilding the whole damn database
spec spec/models # run model specs only
cd spec
spec controllers/user* # run specs for controllers that start with user
答案 4 :(得分:4)
我认为您正在寻找的“禅”体验是在后台运行spec_server
和autospec
,结果是在保存文件时接近即时测试。
但是,我在让这两个程序进行通信方面遇到了问题。
我找到了解释here:
我注意到autotest不会向spec_server发送命令。 相反,它会重新加载整个Rails环境和您的应用程序 插件每次执行时。这会导致自动测试运行 比脚本服务器慢得多,因为当你运行时 script / spec命令将规范发送到spec_server中 已经启动了你的Rails环境并准备好了。如果你 恰巧安装一个新的插件或类似的东西,然后你会 必须重新启动spec_server。
但是,我们如何解决这个问题呢?我猜它会涉及下载ZenTest并更改autotest
程序的代码,但现在没有时间试用它。
答案 5 :(得分:3)
你在Rails上运行吗?如果是这样,那就不是RSpec的初始化那么慢,而是Rails'。在运行规范之前,Rails必须初始化整个代码库和你的。好吧,它不会拥有,但确实如此。在我的小型非铁轨项目中,RSpec对我来说运行速度非常快。
答案 6 :(得分:3)
运行测试可能非常慢,因为整个rails环境必须加载(尝试脚本/控制台),然后才能运行所有测试。您应该使用autotest来保持环境的加载,并检查您编辑的文件。编辑和保存文件时,只有依赖于这些文件的测试才会自动且快速地运行。
答案 7 :(得分:2)
如果您使用的是Mac,我建议使用Rspactor而不是自动测试,因为它使用的资源比自动测试更少的轮询更改文件。有一个完整的Cocoa版本
或我在Github
维护的gem版本sudo gem install pelle-rspactor
虽然这些并没有加快单个rspec测试的速度,但是他们感觉要快得多,因为他们会在一秒钟内自动运行受影响的规范。
答案 8 :(得分:2)
从rspec-rails-1.2.7开始,不推荐使用spec_server来支持spork gem。
答案 9 :(得分:2)
主要原因是,由于某种原因,require需要永远在Windows上。
加速提示: 我相信spork现在适用于windows。
您可以尝试缓存位置的“faster_require”:
http://github.com/rdp/faster_require
GL。 -rp
答案 10 :(得分:1)
如果您使用的是Windows环境,那么您可以做的事情很少,因为Rails似乎在Windows下启动速度非常慢。我在Windows上有相同的经验,不得不将我的设置移到Linux VM上,使它真的很活跃(我也在使用自动测试)。