如何组织minitest /unit testing?

在使用RSpec进行多个项目之后,我将尽力为您服务。 我很喜欢它,但是我错过了使用describe / context块以逻辑的方式对我的testing/规格进行分组。

我知道minitest / spec提供了这个function,但是我喜欢这个minitest / unit,它更接近于准系统Ruby。

是否有任何gem提供描述/上下文支持minitest /单位? 或者,我应该只用最小的/最小的单位来处理我的冗长,无组织的testing文件吗?

我知道来自RSpec的几个人正在为同样的问题苦苦挣扎。 他们喜欢使用描述/上下文块进行嵌套的能力,并希望继续最小化。 有几个解决scheme:

  1. 使用minitest的规格DSL:虽然有细微的差异,规范DSL给你的rspec DSL的大部分(所有?)的好的部分。 最大的区别是缺lesscontext块。 但是你可以很容易地使用describe在其位置,一切都如你所愿。
  2. 使用目录和文件:我更喜欢这个选项。 我不喜欢滚动300行testing文件,无论是使用规范DSL还是经典的xUnit风格。 我没有发现嵌套无关的testing有帮助。 理解代码的相同规则适用于testing。 所以分手吧 创build一个目录并在其中放置几个​​文件。

这里是我的testing文件如何组织的例子:

 test/ models/ user/ authentication_test.rb email_test.rb reservation_test.rb user_test.rb username_test.rb 

我使用这个结构,不pipe我是使用规范DSL还是xUnit风格。 当使用规范的DSL我指定我在我的testing块testing像这样:

 require "minitest_helper" describe User, :authentications do before do # ... 

您也可以将多个类放入一个testing文件中:

 module PizzaTest class Isolation < ActiveSupport::TestCase test "is awesome by default" do assert Pizza.new.awesome? end end class Integration < ActiveSupport::TestCase fixtures :all test "is awesome too" do pizzas('one-with-everything').awesome? end end end 

甚至巢testing类:

 class PizzaTest < ActiveSupport::TestCase test "is awesome by default" do assert Pizza.new.awesome? end class Integration < ActiveSupport::TestCase fixtures :all test "is awesome too" do assert pizzas('one-with-everything').awesome? end end end 

我更喜欢这种方式(只有一点点),但我认为更容易遵循:

 class ConventionalNameTest < ActiveSupport::TestCase class ContextTest < ConventionalNameTest # so much stuff... end class AnotherContextTest < ConventionalNameTest # and some more... end