【发布时间】:2012-06-19 09:42:48
【问题描述】:
我关注了this tutorial on speeding up rspec with spork,我在一个装有 ruby 1.9.2 和 rails 3.2.5 的 win7 x64 机器上。一切正常,但测试仍然执行缓慢。由于操作系统不支持分叉,spork 在 Windows 上根本没有做太多事情吗?
我还能做些什么来加快速度吗?
我也found this similar SO question,看了video by Corey Haines on fast testing。我喜欢这个视频,但是当我们的工具状态(在这种情况下,由于 Rails 启动时间导致的缓慢测试)决定了我们如何构建代码时,我不禁感到有些不对劲。如果不存在那种缓慢的启动时间,那还需要他的方法吗?另一方面,由于测试需要 10 到 30 秒的时间来运行,所以 TDD 的许多好处都失去了,我也看到了他的观点。
如果相关,这里是 spork 的控制台输出,因为 rspec 被执行了几次:
$ bundle exec spork
Using RSpec
-- Starting to fill pool...
Wait until at least one slave is provided before running tests...
** CTRL+BREAK to stop Spork and kill all ruby slave processes **
Spork is ready and listening on 8989!
-- Rinda Ring Server listening for connections...
-- build slave 1...
Preloading Rails environment
-- build slave 2...
Preloading Rails environment
Loading Spork.prefork block...
Loading Spork.prefork block...
Running tests with args ["--color"]...
--> DRb magazine_slave_service: 1 provided...
--> DRb magazine_slave_service: 2 provided...
<-- take tuple(2); slave.run...
-- (2);run done
Done.
-- build slave 2...
Preloading Rails environment
Loading Spork.prefork block...
Running tests with args ["--color"]...
<-- take tuple(1); slave.run...
-- (1);run done
Done.
-- build slave 1...
Preloading Rails environment
Loading Spork.prefork block...
--> DRb magazine_slave_service: 2 provided...
【问题讨论】:
-
有多少示例需要 30 秒才能运行? Spork 不会帮助您加快测试时间。这将使它们在更短的时间内运行。
-
我说的是一般情况。在我的示例中,只有一个测试,它本身在几分之一秒内执行,但实际运行需要 5-10 秒,包括 Rails 加载时间
-
在 windows 上运行 spork 没用,你为什么要这样做?没有任何东西可以帮助你,Windows 上的 ruby 很慢,而且大多数工具都只有 linux/mac。如果你决定继续使用 Windows,你只需要接受 Ruby 在那里相当糟糕的事实。
-
所以,如果有代码让您的 TDD 很痛苦,这通常意味着代码是错误的,您需要改进它。例如,如果您在测试中不使用任何特定于 rails 的东西,为什么需要 rails env 呢?这很复杂,但这是一个权衡取舍的世界。我们只需要确保我们被吸引到一个让我们富有成效的地方。但是请不要使用 windows 进行 Ruby 开发(你也可以尝试 JRuby);)
-
Windows 并没有那么糟糕,除了速度,这确实是我看到的 RoR 的唯一主要障碍。我现在在 Linux 上工作,那些 selenium 测试是如此缓慢,以至于我不禁想像它们将如何在 Windows 上运行。但是 Windows 对学习者来说仍然很好,我确实完成了一次关于 Windows 的教程,这种体验使得在其他环境中的设置变得更加容易。
标签: ruby-on-rails rspec spork