1

我正在尝试在 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 执行三次。

通常当你有一个缓慢的东西时,人们会说“只是模拟它”,但这一次,我想要测试的正是它是缓慢的,所以那是没有意义的。

在所有检查都是前后变化的情况下,如何避免多次调用测试主题?

4

1 回答 1

2

before(:each) 和 after(:each) 是在每个规范之前和之后调用的回调,即每个“它”。如果你想在外部'describe'块之前和之后做一些事情,使用before(:all)和after(:all)。

请参阅此处的 rspec 文档 (relishapp)

(但是请注意,如果您将 rspec 与 rails 一起使用,则使用 before/after(:all) 将在数据库的常规清理之外运行,这可能会导致您的测试数据库出现问题。)

祝你好运!

于 2013-06-13T09:11:55.283 回答