45

每当我为我的 Rails 应用程序运行 rspec 测试时,它需要永远和一天的开销才能真正开始运行测试。为什么 rspec 这么慢?有没有办法加快 Rails 的初始加载或挑出我需要的 Rails 应用程序的一部分(例如仅 ActiveRecord 的东西),所以它不会加载所有东西来运行一些测试?

4

11 回答 11

32

我绝对建议检查一下spork。

http://spork.rubyforge.org/

railstutorial 专门解决了这个问题,并提供了一种解决方法,以使 spork 在 rails 3.0 中运行良好(到目前为止,spork 还不是 rails 3 开箱即用)。当然,如果您不在 Rails 3.0 上,那么您应该很高兴。

教程的一部分展示了如何让 spork 在 rails 3.0 中运行

http://railstutorial.org/chapters/static-pages#sec:spork

检查 spork 何时准备好 rails 3.0

http://www.railsplugins.org/plugins/440-spork

于 2010-10-27T20:59:38.790 回答
22

您应该能够通过在单独的终端窗口中运行来加快script/spec调用速度,然后将附加参数添加到规范调用中。script/spec_server-X

于 2008-09-15T22:38:59.903 回答
4

为什么 rspec 这么慢?因为它加载了所有的环境,加载了固定装置和所有的爵士乐。

有没有办法加快 Rails 的初始负载,您可以尝试使用模拟而不是依赖数据库,这对于单元测试实际上是正确的,并且肯定会加快您的单元测试。另外使用 @Scott Matthewman 提到的规范服务器可以提供帮助,与 @ Marc-Andre Lafortune提到的 zentest 的自动测试相同

有没有办法挑选出我需要的 Rails 应用程序的一部分(例如仅 ActiveRecord 的东西),这样它就不会完全加载所有东西来运行一些测试?那这个呢

rake test:recent 

我不确定 rspec 任务如何与此集成,但您绝对可以使用 test:recent 任务作为模板来对 rspec 测试执行相同操作。

rake test:rspec:recent

还不存在

于 2008-09-16T16:33:48.400 回答
4

因为它加载了所有的环境,加载了固定装置和所有的爵士乐。

真正的罪魁祸首是,如果你运行它使用rake spec它运行db:test:prepare任务

此任务删除您的整个测试数据库并从头开始重新创建它。这对我来说似乎很荒谬,但这就是它的作用(当你跑步时也会发生同样的事情rake:test:units等)。

spec您可以使用rspec 作为 rspec gem 的一部分安装的应用程序轻松解决此问题。

像这样:

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
于 2008-09-17T01:14:17.197 回答
4

我认为您正在寻找的“禅”体验是在后台运行spec_serverautospec结果是在您保存文件时近乎即时的测试。

但是,我在让这两个程序进行通信时遇到了问题。

我在这里找到了解释:

我注意到自动测试不会向 spec_server 发送命令。相反,它每次执行时都会重新加载整个 Rails 环境和应用程序的插件。这会导致 autotest 的运行速度明显慢于脚本服务器,因为当您运行 script/spec 命令时,specs 会发送到已经启动 Rails 环境并准备就绪的 spec_server。如果您碰巧安装了新插件或类似的东西,那么您将不得不重新启动 spec_server。

但是,我们如何解决这个问题?我猜这将涉及下载 ZenTest 和更改程序的代码autotest,但现在没有时间尝试。

于 2008-11-12T00:16:41.187 回答
3

你是在 Rails 上运行的吗?如果是这样,那么慢的不是 RSpec 的初始化,而是 Rails 的。Rails 必须在运行规范之前初始化整个代码库和您的代码库。嗯,它不必,但它确实在我的小型非 Rails 项目下,RSpec 对我来说运行得非常快。

于 2008-09-15T20:47:23.260 回答
3

运行测试可能真的很慢,因为必须加载整个 Rails 环境(尝试脚本/控制台),然后才能运行所有测试。您应该使用自动测试来保持环境加载并检查您编辑的文件。当您编辑和保存文件时,只有依赖于这些文件的测试才会自动快速运行。

于 2008-09-15T22:58:34.193 回答
2

如果您使用的是 Mac,我建议使用 Rspactor 而不是自动测试,因为它使用比自动测试更少的资源来轮询更改的文件。既有完整的 Cocoa 版本

RSpactor.app

或者我在Github维护的 gem 版本

sudo gem install pelle-rspactor

虽然这些并不能加速单个 rspec 测试,但它们会在您点击保存后的一秒钟内自动运行受影响的规范,因此感觉要快得多。

于 2008-09-16T01:27:17.860 回答
2

从 rspec-rails-1.2.7 开始,不推荐使用 spec_server 以支持 spork gem。

于 2010-02-17T21:54:35.117 回答
2

主要原因是由于某种原因 require 在 Windows 上永远存在。

加速提示:我相信 spork 现在可以在 Windows 上运行。

您可以尝试缓存位置的“faster_require”:

http://github.com/rdp/faster_require

总帐。-rp

于 2010-06-03T17:11:48.600 回答
1

如果您在 Windows 环境中,那么您可能无能为力,因为 Rails 在 Windows 下似乎启动非常缓慢。我在 Windows 上也有同样的经历,我不得不将我的设置转移到 Linux 虚拟机上,以使它变得非常流畅(我也在使用自动测试)。

于 2008-09-16T09:05:58.320 回答