rspec 从一组泄漏到另一组

rspec leak from one set to another

我有两套规范文件: spec/unit1/_spec.rb spec/unit2/_spec.rb

unit2 two 有一些应该只在 unit2 中使用的存根,但是当我这样做时它会以某种方式影响 unit1 测试:

RSpec::Core::RakeTask.new(:spec) do |spec|
  spec.fail_on_error = false
  spec.rspec_opts = "--format documentation"
  spec.pattern = FileList['spec/*/*_spec.rb']
end

如果像这样分开,一切都很好:

RSpec::Core::RakeTask.new(:spec1) do |spec1|
  spec.fail_on_error = false
  spec.rspec_opts = "--format documentation"
  spec.pattern = FileList['spec/unit1/*_spec.rb']
end
RSpec::Core::RakeTask.new(:spec2) do |spec2|
  spec.fail_on_error = false
  spec.rspec_opts = "--format documentation"
  spec.pattern = FileList['spec/unit2/*_spec.rb']
end

我的 耙规格 1 和 rake spec2 都很好。

知道问题出在哪里吗? 如果不是,我该如何编写 RakeTask 这样的 rake spec 做 rake spec1 + rake spec2

在 RSpec

中声明订购规格

您显然拥有在规范之间持续存在的状态。当您 运行 将所有测试放在一起时,RSpec 将 运行 以随机顺序进行测试,除非您使用 --order flag.

另行指定

声明有序的 Rake 任务

或者,如果您希望声明一个 Rake 任务依赖于另一个任务,您可以声明 a Rake task has prerequisites。例如:

Spec::Core::RakeTask.new(:spec1) do |spec1|
  spec.fail_on_error = false
  spec.rspec_opts = "--format documentation"
  spec.pattern = FileList['spec/unit1/*_spec.rb']
end

RSpec::Core::RakeTask.new(:spec2) do |spec2|
  spec.fail_on_error = false
  spec.rspec_opts = "--format documentation"
  spec.pattern = FileList['spec/unit2/*_spec.rb']
end

desc "run specs in order"
task :ordered_specs => [:spec1, :spec2] 
task :test_all do
  [ :spec1, :spec2 ].each do |t|
    Rake::Task[t].invoke
  end
end