围绕(:每个)覆盖之前(:每个)

时间:2014-01-15 13:57:25

标签: ruby rspec rspec-rails

我正在做一些围绕每个人的特技表演。我发现around(:each)有些奇怪。当我在下面的例子中运行它时输出为:

describe "AroundSpec" do
  before(:each) do
    p "On before each block"
  end

  around(:each) do
    p "On around each block"
  end

  it "1+1 = 2" do
    expect(1+1).to eq(2)
  end
end

输出:

  "On around each block"
 .

  Finished in 0.00038 seconds
  1 example, 0 failures

如果您发现它在每个块之前没有执行。这种方式是假设是工作还是rspec中的错误?提前致谢

1 个答案:

答案 0 :(得分:2)

这是因为我认为您使用around(:each)错误。为了正确地执行此操作,您必须将测试作为参数传递给块。当您运行此测试时:

around(:each) do | example |
    p "Before the test"
    example.run
    p "After the test"
end

使用此代码输出的测试文件将是:

"Before the test"
"On before each block"
"After the test"

您的代码正在执行的操作是忽略before块并仅执行around1+1=2测试从未实际运行)。有关这方面的文档可以在这里找到:

http://rubydoc.info/gems/rspec-core/RSpec/Core/Hooks#around-instance_method