RSpec多次调用我的慢速测试

时间:2013-06-13 01:25:51

标签: ruby rspec

我正在尝试在RSpec中测试一个对象。我想在之前和之后检查多项内容,因此我按照我在网络上找到的示例进行了操作,结果是这样的:

describe Processor do
  before(:each) do
    # create some data in temp to run the test against
  end
  after(:each) do
    # wipe out the data we put in temp
  end

  let(:processor) { Processor.new }

  describe '#process' do
    subject { lambda { processor.process } }

    # it should actually perform the processing
    it { should change { count('...') }.from(0).to(1) }
    it { should change { count('...') }.from(0).to(2) }

    # it should leave some other things unaffected
    it { should_not change { count('...') } }
  end
end

这确实有效,但我看到的是before()代码和#process都很慢 - 并且由RSpec执行三次。

通常当你有一个缓慢的事情时,人们会说“只是嘲笑它”,但这一次,我试图测试哪个是缓慢的,所以这将毫无意义。

在所有检查都属于前后种类的情况下,如何避免多次调用测试主题?

1 个答案:

答案 0 :(得分:2)

之前(:each)和之后(:each)是在每个规范之前和之后调用的回调,即每个'它'。如果您希望在外部'describe'块之前和之后执行某些操作,请使用before(:all)和after(:all)。

请参阅rspec docs here (relishapp)

(但是,请注意,如果您使用带有rails的rspec,则使用before / after(:all)将在数据库的常规清理之外运行,这可能会导致测试数据库中的垃圾。)

祝你好运!