我的负担和"完成了"运行RSpec的时间是变化的。我可以加快速度吗?

时间:2014-09-24 17:59:38

标签: ruby-on-rails ruby unit-testing rspec

目前,我的大多数测试都是针对模型运行的。目前我有大约100个测试。在运行它们时,我看到了:

在3.99秒内完成(文件加载时间为17.97秒)
完成3.93秒(文件加载时间为17.51秒)
在2.03秒内完成(文件加载2.36秒)<<<现在看来好多了 在4.27秒内完成(文件需要17.45秒才能加载)
在1.98秒内完成(文件加载2.4秒)<<<现在看起来好多了

总共20秒延迟对我来说似乎很多,我随机看到它。这是我应该接受的,还是有更好的方法?随着测试数量的增加,我担心我的开发周期会变得很麻烦。我知道我可以运行单个或一组规范文件。如果可能的话,我想优化运行整个集合。

不确定要添加哪些项目,但这里有一些:

  • RSpec v3.0.4
  • Spring version 1.1.3
  • Rails 4.1.5
  • Mac OS X 10.9.4
弹簧状态报告:
.. $ spring status
Spring正在运行:

17524 spring server | app_name | 137小时前开始 22503春季应用程序| app_name | 77小时前开始|发展模式

1 个答案:

答案 0 :(得分:1)

首先 - 确保使用spring运行规范套件:

spring rspec

这将确保环境由spring预加载,并且RSpec使用预加载的环境。

如果您尚未使用rspec设置spring,只需将spring-commands-rspec添加到您的Gemfile中:

gem "spring-commands-rspec", group: :development

然后停止弹簧以便它获取新配置:

spring stop

您正在这样做,不要相信RSpec报告的加载时间。您看到的加载时间数可能非常不准确。使用弹簧运行RSpec时,加载时间似乎是指弹簧首次启动的时间:

> time spring rspec

Finished in 9.12 seconds (files took 1 minute 11.36 seconds to load)
345 examples, 0 failures

spring rspec  0.45s user 0.06s system 4% cpu 10.304 total

正如你所看到的,RSpec报告说加载需要1分11.36秒,但实际上整个套件在10.3秒内加载并运行!

如果我在2分钟后再次进行测试:

> time spring rspec 

Finished in 9.01 seconds (files took 3 minutes 18.5 seconds to load)
345 examples, 0 failures

spring rspec  0.44s user 0.06s system 4% cpu 10.209 total

<强>更新

错误报告的加载时间存在一个未解决的问题:

https://github.com/jonleighton/spring-commands-rspec/issues/18

此问题有一种解决方法,即将Rspec.configuration.start_time = Time.now添加到bin/rspec中的binstub。有了这个,我得到一致的1秒加载时间:

time spring rspec

Finished in 8.46 seconds (files took 0.53673 seconds to load)
345 examples, 0 failures

spring rspec  0.46s user 0.06s system 5% cpu 9.214 total