【问题标题】:Why doesn't RSpec run these nested describe blocks in a shared_examples_for block?为什么 RSpec 不在 shared_examples_for 块中运行这些嵌套的描述块?
【发布时间】:2014-04-17 12:25:39
【问题描述】:
shared_examples_for "test" do    

  specify {  } # RSpec executes this line.

  describe "nested" do

    specify { } # RSpec doesn't execute this line.

    describe "nested nested" do

      specify {  } # RSpec doesn't execute this line too.

    end
  end
end

为什么会这样? RSpec 甚至不识别嵌套行。 即使实际上有 3 个示例,它也仅显示“1 个示例”。 我使用的是 RSpec 2.14 版。

【问题讨论】:

  • 如果您实际在其中放入内容和断言,它将运行它们。您还有一个语法错误 - 最后一个 do 应该是 end
  • 我放的代码只是一个框架,而不是实际的编码。
  • 那么问题比你告诉我们的要多 - 正如答案所示,这会很好。

标签: ruby-on-rails rspec


【解决方案1】:

什么都没有运行,因为没有什么可以运行!您声明了一个 shared_examples_for 块,但实际上您并没有在任何地方使用过这些示例。

使用it_behaves_like 实际运行示例:

╭── jxf@polytope · 2014-04-16 · 23:07:32
│   ‹ruby:ruby-2.1.0@›
│   /tmp/foo
╰─▶ ψ cat test_spec.rb 
shared_examples_for "test" do
  specify { }
  describe "outer" do
    specify { }
    describe "inner" do
      specify { }
    end
  end
end

describe "naked" do
  it_behaves_like "test"
end

看看我们现在如何使用it_behaves_like 块?让我们运行示例:

╭── jxf@polytope · 2014-04-16 · 23:08:18
│   ‹ruby:ruby-2.1.0@›
│   /tmp/foo
╰─▶ ψ rspec test_spec.rb 
...

Finished in 0.00047 seconds
3 examples, 0 failures

【讨论】:

  • 是的,我在另一个地方使用it_behaves_like 块来调用我定义的共享示例。除了我上面提到的部分之外,共享示例块被执行。
  • @tkymtk 好吧,正如我的回答所表明的那样,您必须从对问题的描述中省略一些内容。正如目前所描述的,一切正常。
  • 好吧,当我在同一个文件中定义shared_examples_forit_behaves_like 时,一切顺利。但是当我将它们分成两个文件时仍然无法正常工作。
  • @tkymtk 它在不同的文件中也可以正常工作。请重现问题并向我们展示您遇到问题的代码。
  • 是的,我想我明白了。当我注释掉一些行时,一些示例正在做坏事,测试进展顺利。此外,当我使用末尾指定的行执行嵌套示例时,RSpec 似乎无法识别嵌套示例,例如 rspec spec/***/**.rb:23
猜你喜欢
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 2016-10-21
相关资源
最近更新 更多