【发布时间】:2010-12-13 15:04:45
【问题描述】:
我有一些应用程序我想返回并追溯构建一个测试套件(RSpec 和 Cucumber),但启动该过程有点令人生畏。
您将如何返回现有应用并为其构建测试套件?
【问题讨论】:
-
+1 因为我问自己同样的问题
标签: ruby-on-rails testing rspec cucumber
我有一些应用程序我想返回并追溯构建一个测试套件(RSpec 和 Cucumber),但启动该过程有点令人生畏。
您将如何返回现有应用并为其构建测试套件?
【问题讨论】:
标签: ruby-on-rails testing rspec cucumber
我最近开始自己处理向一堆旧代码添加测试,我发现非常有帮助的是rcov(我不关心 rcov rails 插件,只需 cd 来测试和运行一个小 shell 脚本使用正确的排除项运行 rcov 并在测试全部通过时打开报告。)然后,我开始处理最接近 100% 覆盖率的问题,并一点一点地计算百分比。这比“呃,我从哪里开始为此添加测试?!”更可衡量的进展
【讨论】:
我最近为客户项目做了很多这样的事情。对我来说最大的障碍似乎是在有或没有 RJS 的情况下大量使用内联 javascript。 [旁注:做 AJAX 有对错之分,大多数人都在做错事™。]我通常大量使用黄瓜和一些 rspec 进行奇怪的单元测试。
要考虑的变量多种多样,但最好从对模型进行一些单元测试开始。创建一些工厂并测试您的验证,以及您认为需要测试的任何自定义行为。
如果您对此不感兴趣,或者您已经拥有一套单元测试并且您想要添加集成,那么下一个问题是您在多大程度上执行了大量内联 javascript 或 RJS。如果你的应用程序非常“ajaxy”,你需要从黄瓜的 selenium 驱动程序开始,它在 2 月就像糖蜜一样慢,但它会完成工作。一旦你有一套测试涵盖了你的应用程序的全部功能(甚至只是重要的东西),我会开始重构 javascript 以不显眼地运行。
您可以采取的另一个方向是为您的控制器和视图构建额外的 rspec,但我不太喜欢这种模式,因为您正在测试 实现 而不是 功能。
要记住的重要一点是,这一切都不必在一夜之间发生。分析您的工作流程(例如登录、执行任务 A、执行任务 B 等)并确定哪些工作流程涵盖了 80% 的典型用例。先测试那些。然后使用 metric_fu 之类的东西或只是普通的 rcov(或任何其他覆盖工具),并找到逻辑密集且未经测试的代码区域。我喜欢 metric_fu 因为它运行的工具套件可以为您提供这两种信息。
【讨论】:
我在这里有点跑题了,但无论如何......
我认为在 Rails 中对模型进行单元测试(至少 3 个)有点毫无价值……我的意思是特别是在编写代码时,所以你没有做 TDD。你想测试你的验证吗?为什么 ?只需阅读代码,您就会自己找出错误。我说 Rails (在某些地方)提供了这样一种人类语法,以至于对它进行单元测试是一种耻辱。
在我看来,这样的语法本身就是一种规范。那么,为什么要写测试呢?
并且要明确一点:不,我并不是说测试一直都是无用的。我不在一些随机的网络机构工作......:p
【讨论】: