Czy istnieje sposób, w jaki mogę uruchomić po / przed blokiem po / przed konkretnym testem za pomocą etykiet?

Mam 3 it bloki

describe "describe" do

  it "test1" do
  end

  it "test2" do
  end

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

end

Jak uruchomić po zablokowaniu dopiero po Test2? Czy to jest możliwe?

2
AutomateFr33k 5 czerwiec 2018, 04:09

3 odpowiedzi

Najlepsza odpowiedź

Powinieneś użyć context s, aby to zrobić. Coś jak:

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

Jeśli / inaczej warunki przed / po blokach jest zapach kodu. Nie rób tego w ten sposób. To sprawi, że twoje testy kruche, podatne na błędy i trudno się zmienić.

5
Gavin Miller 5 czerwiec 2018, 01:19

Najlepszym sposobem na to jest użyć context. Do twojego przykładu:

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
2
Caleb Keene 5 czerwiec 2018, 04:48

Tak, możesz to zrobić, spójrz Oto

Możesz osiągnąć to przy użyciu metadata w RSPEC

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
0
Subash 5 czerwiec 2018, 01:12