如何在rspec示例之间设置一些依赖关系?

时间:2012-03-01 10:24:42

标签: ruby rspec dependencies

我们需要的是运行一个示例,除非所有依赖项都已成功运行。

即:

describe group_example do
    it example_1 do
       ####
    end
    it example_2 do
       ####
    end
    it example_3 do
       ####
    end

    example_4 should not run unless example_1, example_2 & example_3
    Returns Sucess else return NOT RUN
end

你能告诉我该怎么做吗?

谢谢。

此致 Nouha

2 个答案:

答案 0 :(得分:4)

这告诉我你需要重新构建你的规范 - 而不是依赖于套件中早期运行的其他规范的成功或失败的规范,考虑明确配置你想为每个规范测试的条件。这就是RSpec提供before方法的原因。事实上,你并没有真正测试你的应用程序代码 - 你正在测试你的测试套件的行为。

在这种特殊情况下,对于步骤4,将应用程序设置为好像测试1,2和3成功,然后运行特定于步骤4的测试。最好尽可能地隔离测试中的代码,如果你可以帮助它,不要在测试之间引入依赖关系。

答案 1 :(得分:1)

正如@D_Bye所指出的那样,您可以使用before来设置和验证示例组的前提条件,并且可以嵌套示例。

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

  it "example 2" do
    ####
  end

  it "example 3" do
    ####
  end

  context "with preconditions" do
    before(:each) do
      # Establish the same preconditions as tested by examples
      # 1, 2, 3, or mark examples in this context as pending.
      begin
        ####
        raise "foo"
      rescue RuntimeError => e
        pending "preconditions not met: #{e.message}"
      end
    end

    it "example 4" do
      ####
    end
  end
end

您还可以filtering仅运行可以运行的示例(例如,取决于已安装的软件)。