在rspec中禁用一组测试?

时间:2011-05-07 01:46:43

标签: ruby rspec

我有一个测试规范describes一个类,其中包含各种contexts,其中包含各种it块。

有没有办法暂时停用context

我尝试在我要禁用的pending "temporarily disabled"内的最顶部添加context来电,当我运行规范时,我确实看到了有关待处理的内容,但之后只是继续运行其余内容测试。

这就是我所拥有的:

describe Something
  context "some tests" do
    it "should blah" do
      true
    end
  end

  context "some other tests" do
    pending "temporarily disabled"

    it "should do something destructive" do
      blah
    end
  end
end

但就像我说的那样,它继续在待处理的呼叫下运行测试。

搜索引导我进入这个mailing list thread,其中rspec的创建者(?)说它在rspec 2中是可能的,我正在运行。我想它确实有效,但它没有取消所有以下测试的预期效果,这就是我在看到pending电话时的想法。

有替代方案还是我做错了?

6 个答案:

答案 0 :(得分:149)

要使用 RSpec 3 禁用规格树,您可以:

before { skip }
# or 
xdescribe
# or 
xcontext

您可以添加一条消息,其中 skip 将显示在输出中:

before { skip("Awaiting a fix in the gem") }

RSpec 2

before { pending }

答案 1 :(得分:43)

使用exclusion filters。 从该页面: 在spec_helper.rb(或rails_helper.rb

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end

在你的测试中:

describe "group 1", :broken => true do
  it "group 1 example 1" do
  end

  it "group 1 example 2" do
  end
end

describe "group 2" do
  it "group 2 example 1" do
  end
end

当我运行“rspec ./spec/sample_spec.rb --format doc”

然后输出应包含“group 2 example 1”

输出不应包含“group 1 example 1”

输出不应包含“group 1 example 2”

答案 2 :(得分:19)

看看你对此的看法:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

我喜欢看待我的待处理项目的原因,当我禁用“一段时间”的东西时。它们用作定期呈现的小评论/ TODO,而不是隐藏在评论或被排除的示例/文件中。

it更改为pendingxit既快捷又简单,但我更喜欢哈希构造。它为您提供了每个运行的文档,是一个插件(不会更改describe / context /它所以我必须决定以后再次使用它),并且如果做出决定或阻止程序被删除,也很容易删除

对于群组和个人示例,这同样适用。

答案 3 :(得分:9)

另一个。 https://gist.github.com/1300152

使用xdescribe,xcontext,xit来禁用它。

更新

自rspec 2.11起,它默认包含xit。所以新代码将是

# put into spec_helper.rb
module RSpec
  module Core
    module DSL
      def xdescribe(*args, &blk)
        describe *args do
          pending 
        end
      end

      alias xcontext xdescribe
    end
  end
end

用法

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 

答案 4 :(得分:3)

使用pending而不是describe。如果你的块是:

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

您可以跳过整个区块:

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

答案 5 :(得分:0)

只是为了解释您的代码发生了什么。包括它在哪里,它只是在启动期间加载文件时被评估(并因此运行)。但是,您需要在测试运行时运行它。这就是为什么答案建议将pending(RSpec 2)或skip(RSpec 3)放入before块。