簡體   English   中英

在Rspec中進行特定測試后運行

[英]Run after block after specific test in Rspec

有沒有辦法在使用標簽的特定測試之后/之前運行after / before塊?

我有3個it

describe "describe" do

  it "test1" do
  end

  it "test2" do
  end

  after(<<what goes here??>>) do
  end

end

如何在test2之后運行after塊? 那可能嗎?

您應該使用context來執行此操作。 就像是:

describe "describe" do
  context 'logged in' do
    before(:each) do
      # thing that happens in logged in context
    end

    after(:each) do
      # thing that happens in logged in context
    end

    it "test1" do
    end
  end

  context 'not logged in' do
    # No before/after hooks here. Just beautiful test isolation

    it "test2" do
    end
  end
end

在塊之前/之后具有if / else條件是代碼氣味。 不要這樣做。 它只會使你的測試變得脆弱,容易出錯,而且難以改變。

執行此操作的最佳方法是使用context 對於你的例子:

describe "AutomateFr33k's fr33ky tests" do

  it "runs test1" do
    expect(true).to be_true
  end

  context "do something afterwards" do
    after { puts "running something after test2!" }

    it "runs test2" do
      expect(5).not_to eq(4)
    end
  end
end

是的,你可以這樣做,看看這里

您可以使用rspec中的metadata來實現這一點

RSpec.configure do |config|
  config.treat_symbols_as_metadata_keys_with_true_values = true
end

describe "Skip hook demo" do
  # If prior to RSpec 2.99.0.beta1
  after do
    puts "before hook" unless example.metadata[:skip]
  end

  # If RSpec 2.99.0.beta1 or later
  after do |example|
    puts "before hook" unless example.metadata[:skip]
  end

  it "will use before hook" do
  end

  it "will not use before hook", :skip do
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM