打破你的RSpec测试

时间:2011-12-16 22:41:31

标签: ruby-on-rails rspec rspec2

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

  • 有一种系统的命名和放置测试方法(例如方法A-L gos到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 个答案:

答案 0 :(得分:6)

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

所以,我会把它分解成更小的类,每个类都有一个单一的责任。然后,单独测试这些类。

你可能会发现你的User类知道如何在你的系统中执行大多数逻辑 - 这是一个容易陷入的陷阱,但是如果你把你的逻辑放在一个以用户为一个类的类中就可以避免争论......如果你坚持遵守demeter定律(你的用户类只能触及它下面的1级,而不是2级)。

进一步阅读:http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html