【问题标题】:rspec leak from one set to anotherrspec 从一组泄漏到另一组
【发布时间】:2015-06-23 14:06:44
【问题描述】:

我有两组规格文件: 规格/unit1/_spec.rb spec/unit2/_spec.rb

unit2 2 有一些存根,应该只在 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

【问题讨论】:

  • 您在测试中保留状态。请发布您的规格,而不仅仅是您的 rake 任务。
  • 它有很多文件,我的规范中没有状态,只有我调用的 API 有。
  • 无论如何,你能给我替代解决方案吗?如何编写 RakeTask 以使 rake spec 执行 rake spec1 + rake spec2。谢谢。

标签: ruby rspec rake rake-task


【解决方案1】:

在 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] 

【讨论】:

  • 似乎没问题,但我如何将“rake spec”挂钩到任务 spec1 和 spec2?
【解决方案2】:
task :test_all do
  [ :spec1, :spec2 ].each do |t|
    Rake::Task[t].invoke
  end
end

【讨论】:

    猜你喜欢
    • 2021-03-24
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    相关资源
    最近更新 更多