如何在rspec2中定义套件

时间:2011-07-21 09:05:20

标签: ruby-on-rails rspec

如何在rspec2中定义套件。确实,套房是什么?

我想将我的规格分解为两个套件,并在运行两个套件之间重置所有内容(清理测试数据库,重置warden等等)。我想我可以用before(:suite)块来做到这一点。

更新: 我的理解是一个例子是:

 it "should be true" do
...
end

一个群体就像是:

 describe Model do
...
end

这种理解似乎通过在我的代码中添加一些调试语句来验证。但是如何定义套件?它只是spec文件夹中的所有规格吗?在哪种情况下有办法实现我想要做的事情?

(我真的很惊讶,我无法通过谷歌搜索或以前的问题的答案找到它。)

2 个答案:

答案 0 :(得分:1)

正如我所看到的,RSpec本身没有像套件这样的东西。我挖了一下,发现了以下内容:

  • 有一个名为"My top 7 RSpec best practices"的人发帖,您可以在第6节“创建多个测试套件以加快工作流程”中找到该帖子。这解释了如何将您的规范拆分为Rakefile中的“套件”并单独调用它们。
  • David Chelimsky在“The RSpec Book”一书中解释了你试图达到的目的。在第16.5节中,他解释了Global Hooks(之前,之后,周围......),其中可以使用关键字:suite作为范围。含义:
  

如果:each,则在每次匹配之前运行块   例。如果:all,则在任何匹配之前,每个组运行一次​​块   示例已经运行。如果:suite,则块之前运行一次   任何示例组都已运行。

因此,如果您在示例组中划分规范,则可以使用eg控制。 before(:suite) do ...每个示例组应该做什么。

答案 1 :(得分:1)

您可以使用单独的描述调用,也可以在调用之前和之后执行:

describe "some cool text for suite 1" do
  before do
    ...
  end

  it "some test in suite 1" do
    ...
  end

  ...more tests...

  after do
    ...
  end
end

describe "some cool text for suite 2" do
  ...same shape as above...
end

这将允许您为您的相关测试集分离“设置”和“拆除”。然后,您可以使用

添加rake任务以按套件运行spec test
rspec spec/ -e"Suite 1"  # call this task spec:suite1 or something like that

我没有完成rake任务的一部分,但我经常用这种机制定义概念套件。