【问题标题】:Breaking down your RSpec tests分解你的 RSpec 测试
【发布时间】:2011-12-16 22:41:30
【问题描述】:

我的一些 Rspec 测试变得非常非常大(2000-5000 行)。我只是想知道是否有人尝试将这些测试分解为满足以下条件的多个文件:

  • 有一种系统的方式来命名和放置您的测试(例如,方法 A-L 转到 user_spec1.rb)。
  • 您可以运行一个文件,该文件将实际运行其他文件中的其他测试。
  • 您仍然可以在文件中运行特定上下文
  • 而且,很高兴拥有 RubyMine 可以很好地运行特定测试(和所有测试)。

目前,我已经成功了

#user_spec.rb
require 'spec_helper'
require File.expand_path("../user_spec1.rb", __FILE__)
include UserSpec

#user_spec1.rb
module UserSpec do
  describe User do
    ..
  end
end

【问题讨论】:

  • 您是否考虑过标记它们?
  • 抱歉,我不太清楚你所说的标记是什么意思
  • 您可以标记单个规范并将它们一起运行。
  • 哦,我明白了.. 不过,这对分解 1 个文件中的测试数量有什么帮助?这背后的想法是我想帮助开发人员组织他们的测试。应该有一个系统的方法来寻找测试和放置新的测试。新开发人员应该能够轻松找到/放置现有/新方法的测试。
  • 为什么不呢?光说没用是没用的。标记是对不同规格(或其他任何东西)进行分组的一种非常常见的方式。

标签: ruby-on-rails rspec rspec2


【解决方案1】:

如果您的规格变得太大,很可能您的模型也太大了——因为您在这里使用了“UserSpec”,所以您可以说您的用户类是“God class”。也就是说,它做得太多了。

因此,我会将其分解为更小的类,每个类都有一个单一的职责。然后,单独测试这些类。

您可能会发现,您的 User 类知道如何在您的系统中执行大多数逻辑——这是一个很容易掉入的陷阱,但如果您将逻辑放在一个将用户作为论点...此外,如果您坚定不移地遵循 demeter 法则(您的用户类只能触及低于它的 1 级,但不能触及 2 级)。

延伸阅读:http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html

【讨论】:

  • 我无法访问此链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
相关资源
最近更新 更多