2

背景:

我在 Windows 7 x64 上使用 Engine Yard 的 RailsInstaller 2 包,这意味着 Ruby 1.9.2-p290 和 Rails 3.1.1。

问题:

在尝试Ruby on Rails 教程并让 autotest 和 spork 按预期工作后,很明显,虽然 rspec 报告测试在几秒钟内完成,但实际消耗的时间远大于此,接近半分钟,a与截屏视频中观察到的瞬间反应相去甚远。我知道其中大部分可以归因于 Rails 加载时间(从 spork 在预加载阶段花费的时间也很明显),以及 JRuby 是如何变慢的(与 Linux 上的 Ruby 相比),但每个 rspec 15+s平均运行(有或没有 spork,考虑到加载时间)对于 TDD 来说是非常站不住脚的。除了切换到 Linux 之外,还有其他方法可以将其减少到几秒钟吗?

编辑:我提出这个问题的方式有问题吗?

4

3 回答 3

1

Rails 加载时间相当长。正如您所提到的,这可能是 TDD 杀手。

关于如何解决这个问题有几种方法:

  1. 使用 Guard 通知 fs 事件并使用 spork 调用分叉轨道,并调用在 spec 文件或 SUT(被测对象)文件更改上运行的 rspec 测试。
  2. 将逻辑移到依赖于 rails 的类(控制器、活动记录模型)之外,并改用普通的 ruby​​ 对象。

我使用这两种方法。第二种方法有很多优点:

  • 您可以独立测试您的类,而不依赖于 rails
  • 测试将运行得非常快,因为您没有加载轨道,只有特定的必需类
  • 它驱使您走向 SRP(单一责任原则),其中每个类/模块都有整个系统的一小部分
  • 它鼓励 DRY(不要重复自己)——当你有小块时,更容易重复使用它们。
  • 您正在使用 DI(依赖注入)为您的小对象提供上下文,这使它们更易于测试和重用。

必须注意:

于 2012-07-20T07:59:25.770 回答
0

这可能是目前最好的。Windows 上的相同设置在 Linux 上只需几秒钟。我没有在 Ruby 1.9.3 上进行过测试,但这不太可能显着改变这种情况。

于 2012-02-18T09:10:52.253 回答
0

我最近想出了一个在其他地方没有提到的解决方案:

我在 VirtualBox 中运行 Ubuntu,并将我的项目目录配置为共享文件夹。这意味着 Ubuntu 盒子总是看到我的代码的最新版本,所以我可以享受 linux CLI 的时间,并且仍然保持 Windows 作为我的开发平台。到目前为止,我只使用了大约一周的时间,但到目前为止我还没有遇到任何缺点。

于 2012-12-31T14:14:26.397 回答