【问题标题】:Rspec run before block once before multiple it blocksRspec 在多个它块之前在块之前运行一次
【发布时间】:2019-07-24 05:16:09
【问题描述】:

我在 rspec 中有一个 context 块,里面有多个 it 块。我想运行一个 before 块来设置 it 块的数据,但是这个数据需要很长时间才能设置并且被用于只读。 rspec before(:each) 在每个 it 阻塞后创建和删除此数据,这需要很长时间。 before(:all) 在所有测试开始时创建数据并且不会删除它。

有什么方法可以在 context 块内创建这些数据并在之后删除?

【问题讨论】:

  • 您是否尝试过在完成后使用after(:all) 块来清理数据?听起来你有一个before(:all) 在它设置的地方工作,你只需要拆掉它。这是下面第一个答案中提到的,但使用不同的别名(:context 而不是:all

标签: ruby rspec


【解决方案1】:

自 RSpec 3 起,这些被正式命名为 before/after(:{example,context})(参见 docs)。

您想要完成的任务可以通过设置数据的before(:context) 和清理数据的after(:context) 来完成。

RSpec.describe Thing do
  before(:context) do
    @thing = Thing.new
  end

  after(:context) do
    @thing.delete
  end

  it "has 0 widgets" do
    expect(@thing.widgets.count).to eq(0)
  end

  it "can accept new widgets" do
    @thing.widgets << Object.new
  end

  it "shares state across examples" do
    expect(@thing.widgets.count).to eq(1)
  end
end

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2017-12-14
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    相关资源
    最近更新 更多