拆解你的RSpec测试

5

我的一些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

你考虑过打标签来代替吗? - Dave Newton
因为您可以在不同文件中使用相同的标签标记规范。如何分解测试是任意的(尽管按字母顺序进行排序是任意的;按功能进行排序会更有意义)。 - Dave Newton
假设这个规范是为一个模型而制定的。你认为按照每个方法的目的(回调、私有、公共、关联、验证)来拆分文件怎么样?你认为这种方法有什么明显的缺点吗? - denniss
完全取决于情况。可见性也基本上是任意的。验证是有意义的。 - Dave Newton
1
为什么不呢?光说而不行动是没有用的。标签是一种常见的将不同规格(或其他任何东西)分组的方式。 - Dave Newton
显示剩余4条评论
1个回答

6
如果您的规格书变得太大,那么很可能您的模型也太大了——因为您在这里使用了“UserSpec”,所以您可以说您的用户类是一个“God class”,即它做了太多事情。
因此,我会将其分解成更小的类,每个类都具有单一的责任。然后,独立地测试这些类。
您可能会发现,您的用户类知道如何在系统中执行大部分逻辑——这是一个容易陷入的陷阱,但如果您将逻辑放在以用户为参数的类中,则可以避免这种情况……同时,如果您坚定不移地遵循迪米特法则(即您的用户类只能接触到下面一层,而不能接触两层),也可以避免这种情况。
进一步阅读:http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html

我无法访问这个链接。 - Aniket Tiwari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接