在rspec中禁用一组测试?

Jor*_*eña 98 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
Run Code Online (Sandbox Code Playgroud)

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

搜索引导我进入这个邮件列表线程,其中rspec的创建者(?)表示它可能在我正在运行的rspec 2中.我猜它确实有效,但它没有取消所有以下测试的预期效果,这就是我在看到一个pending电话时的想法.

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

Pyr*_*yro 154

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

before { skip }
# or 
xdescribe
# or 
xcontext
Run Code Online (Sandbox Code Playgroud)

您可以添加带有跳过的消息,该消息将显示在输出中:

before { skip("Awaiting a fix in the gem") }
Run Code Online (Sandbox Code Playgroud)

RSpec 2:

before { pending }
Run Code Online (Sandbox Code Playgroud)

  • @ p.matsinopoulos只需将它添加到`describe'XXXXX'do`之后的行.工作就像一个魅力,谢谢@Pyro! (2认同)
  • 这很好.您还可以在"跳过"后包含一条消息,该消息将显示在输出中. (2认同)

Rob*_*her 44

使用排除过滤器.从该页面:在您的spec_helper.rb(或rails_helper.rb)

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end
Run Code Online (Sandbox Code Playgroud)

在你的测试中:

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
Run Code Online (Sandbox Code Playgroud)

当我运行"rspec ./spec/sample_spec.rb --format doc"时

然后输出应包含"组2示例1"

并且输出不应包含"组1示例1"

并且输出不应包含"组1示例2"


bot*_*mer 19

看看你怎么看待这个:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end
Run Code Online (Sandbox Code Playgroud)

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

更改itpending或者xit是快速和容易的,但我更喜欢的散列建设.它为您提供了每个运行的文档,是一个插件(不会改变describe/context /它所以我必须决定以后再次使用它),并且如果做出决定或阻止程序被删除就可以轻松删除.

对于组和个别示例,这同样适用.

  • 确认这在 rspec 3.6.0 中对 `pending:` 和 `skip:` 都有效。对我来说似乎是最好的解决方案。在 rspec3 中,pending 仍然运行测试,但 `skip` 不会(但是你应用了 `skip`)。 (2认同)

Gut*_*nYe 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
Run Code Online (Sandbox Code Playgroud)

用法

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 
Run Code Online (Sandbox Code Playgroud)