使用带有 Rails 脚手架的测试驱动开发 (TDD)

Posted

技术标签:

【中文标题】使用带有 Rails 脚手架的测试驱动开发 (TDD)【英文标题】:Using test-driven development (TDD) with Rails scaffolding 【发布时间】:2014-02-14 17:22:56 【问题描述】:

我希望能更好地理解在 Rails 4 应用程序中使用 TDD 的过程。

迄今为止我发现的关于该主题的最佳帖子是15 TDD steps to create a Rails application。它建议遵循以下步骤:

搭建模型 为模型创建单元测试 --> 测试失败 为模型创建迁移 --> 测试通过 用所需的动作搭建控制器 为控制器创建功能测试 --> 测试失败 将代码添加到控制器操作 --> 测试通过 为视图创建功能测试 --> 测试失败 创建视图 --> 测试通过

这种方法带来了比rails g scaffold Foo 更多的工作。但是使用脚手架会导致测试(如果已构建)会通过,这违反了核心 TDD 原则。

我还了解到不应测试框架提供的功能(例如,validates_presence_of 的单元测试)。

这让我想问:我应该跳过对脚手架生成的代码的单元和功能测试,只测试我的自定义,还是应该遵循博客文章作者使用的逐层模式?

【问题讨论】:

你想用脚手架做什么?它们只生成最基本的代码来执行 CRUD 操作,生成的测试远不值得使用。 (阅读您提供的链接:它是从 2007 年开始的,使用的 Rails 版本甚至比 Rails 2 还要早,并且没有提及使用脚手架?) @yerforkferchips:是的,我意识到脚手架是相当基础的,它的测试没有用。但是对于 Rails 4,这是一个不错的起点,可以节省时间并消除遗漏。是的,这篇文章很老了,但仍然描述了一个过程。我引用这篇文章作为与脚手架和可能的工作流程的对比。 【参考方案1】:

如果我正确理解您的问题,这篇文章会提供一个措辞非常优美的答案:

http://robots.thoughtbot.com/unpopular-developer-5-stop-unit-testing-your-scaffold

本质上,它的信息是您应该只测试与脚手架生成的行为有偏差的地方,因为脚手架生成的测试太简单而没有用处。

【讨论】:

以上是关于使用带有 Rails 脚手架的测试驱动开发 (TDD)的主要内容,如果未能解决你的问题,请参考以下文章

覆盖rails 5的控制器测试脚手架

使用Rails Rspec进行测试 - 预期和得到的不匹配

为啥 Rails 脚手架生成器只是忽略了我的 config/initializers/inflections.rb?

vuecli脚手架+vue+vuex实现vue驱动的demo。

带有视图测试和嵌套资源的 Rspec 和 Rails

Scaffold Rails 3 视图中的外键下拉列表