在rspec中禁用一组测试?


102

我有一个测试规范,其中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

但是就像我说的那样,它只是在待处理的调用下继续运行测试。

搜索使我进入此邮件列表线程,其中rspec的创建者(?)表示在我正在运行的rspec 2中是可能的。我想它确实有效,但是禁用以下所有测试并没有达到预期的效果,这是我看到pending电话时想到的。

是否有其他选择或我做错了吗?

Answers:


165

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

before { skip }
# or 
xdescribe
# or 
xcontext

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

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

使用RSpec 2

before { pending }

1
您如何在具有以下条件的街区上精确地做到这一点:describe 'XXXXX' do .... end
p.matsinopoulos

2
@ p.matsinopoulos只需将其添加到下面的行中describe 'XXXXX' do。像魅力一样工作,谢谢@Pyro!
chesterbr

比过滤器更简单的解决方案,+ 1
dolzenko

我爱你。我欠你啤酒!
2014年

2
很好 您还可以在“跳过”之后添加一条消息,该消息将显示在输出中。
2014年

44

使用排除过滤器。在该页面上:在您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”时

然后输出应包含“第2组示例1”

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

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


19

看看您对此有何看法:

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

我喜欢在“暂时”禁用某些功能时查看待处理项目的原因。它们只是定期显示的少量注释/待办事项,而不是埋在注释或排除的示例/文件中。

更改itpendingxit快速简便,但是我更喜欢哈希结构。它为您提供了每次运行的文档,是一个插件(无需更改describe / context / it,因此我必须稍后决定使用什么),并且在做出决定或删除阻止程序后也很容易删除。 。

对于组和单个示例,其工作原理相同。


此外,我不确定它是否与describe相同,但实际上待定实际上会运行测试,并且如果测试开始通过则失败。xdescribe(我想就像xit一样)-只是不运行它。
PL J

1
确认rspec 3.6.0中的pending:和和都可以使用skip:。似乎是我的最佳解决方案。在rspec3中,pending仍将运行测试,但skip不会运行(但是您可以应用skip)。
jrochkind

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 

3

使用待定而不是描述。如果您的阻止是:

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

1
describe "GET /blah" do

  before(:each) { pending "Feature to be implemented..." }

  it { expect(page).to have_button("Submit") }
  it { expect(page).to have_content("Blah") }
end

0

只是为了解释您的代码正在发生什么。在启动过程中加载文件时,只要包含它,它就会得到评估(并因此运行)。但是,您需要在测试运行时运行它。这就是为什么答案建议将pending(RSpec 2)或skip(RSpec 3)放在一个before块中的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.