打破你的RSpec测试

den*_*iss 5 rspec ruby-on-rails rspec2

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

  • 有一种系统的命名和放置测试的方法(例如,方法AL 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
Run Code Online (Sandbox Code Playgroud)

Jes*_*ott 6

如果你的规格太大,你的模型可能太大了 - 因为你在这里使用了"UserSpec",你可以说你的用户类是" 神级 ".也就是说,它做得太多了.

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

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

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