f1b36aa46c
- Clarify message shown when skipping quarantined tests because they don't have all the specified tags. - Simplify rejecting item from array - Remove 'pass' from example descriptions to avoid confusion
264 lines
8.4 KiB
Ruby
264 lines
8.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
describe 'rspec config tests' do
|
|
let(:group) do
|
|
RSpec.describe do
|
|
shared_examples 'passing tests' do
|
|
example 'not in quarantine' do
|
|
end
|
|
example 'in quarantine', :quarantine do
|
|
end
|
|
end
|
|
|
|
context 'foo', :foo do
|
|
it_behaves_like 'passing tests'
|
|
end
|
|
|
|
context 'default' do
|
|
it_behaves_like 'passing tests'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'default config' do
|
|
it 'tests are skipped if in quarantine' do
|
|
group.run
|
|
|
|
foo_context = group.children.find { |c| c.description == "foo" }
|
|
foo_examples = foo_context.descendant_filtered_examples
|
|
expect(foo_examples.count).to eq(2)
|
|
|
|
ex = foo_examples.find { |e| e.description == "not in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = foo_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('In quarantine')
|
|
|
|
default_context = group.children.find { |c| c.description == "default" }
|
|
default_examples = default_context.descendant_filtered_examples
|
|
expect(default_examples.count).to eq(2)
|
|
|
|
ex = default_examples.find { |e| e.description == "not in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = default_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('In quarantine')
|
|
end
|
|
end
|
|
|
|
context "with 'quarantine' tagged" do
|
|
before do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter = :quarantine
|
|
end
|
|
end
|
|
after do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter.clear
|
|
end
|
|
end
|
|
|
|
it "only quarantined tests are run" do
|
|
group.run
|
|
|
|
foo_context = group.children.find { |c| c.description == "foo" }
|
|
foo_examples = foo_context.descendant_filtered_examples
|
|
expect(foo_examples.count).to be(1)
|
|
|
|
ex = foo_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
default_context = group.children.find { |c| c.description == "default" }
|
|
default_examples = default_context.descendant_filtered_examples
|
|
expect(default_examples.count).to be(1)
|
|
|
|
ex = default_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
end
|
|
end
|
|
|
|
context "with 'foo' tagged" do
|
|
before do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter = :foo
|
|
end
|
|
|
|
group.run
|
|
end
|
|
after do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter.clear
|
|
end
|
|
end
|
|
|
|
it "tests are not run if not tagged 'foo'" do
|
|
default_context = group.children.find { |c| c.description == "default" }
|
|
expect(default_context.descendant_filtered_examples.count).to eq(0)
|
|
end
|
|
|
|
it "tests are skipped if in quarantine" do
|
|
foo_context = group.children.find { |c| c.description == "foo" }
|
|
foo_examples = foo_context.descendant_filtered_examples
|
|
expect(foo_examples.count).to eq(2)
|
|
|
|
ex = foo_examples.find { |e| e.description == "not in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = foo_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('In quarantine')
|
|
end
|
|
end
|
|
|
|
context "with 'quarantine' and 'foo' tagged" do
|
|
before do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter = { quarantine: true, foo: true }
|
|
end
|
|
end
|
|
after do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter.clear
|
|
end
|
|
end
|
|
|
|
it 'of tests tagged foo, only tests in quarantine run' do
|
|
group.run
|
|
|
|
foo_context = group.children.find { |c| c.description == "foo" }
|
|
foo_examples = foo_context.descendant_filtered_examples
|
|
expect(foo_examples.count).to eq(2)
|
|
|
|
ex = foo_examples.find { |e| e.description == "not in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('Running tests tagged with all of [:quarantine, :foo]')
|
|
|
|
ex = foo_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
end
|
|
|
|
it 'if tests are not tagged they are skipped, even if they are in quarantine' do
|
|
group.run
|
|
default_context = group.children.find { |c| c.description == "default" }
|
|
default_examples = default_context.descendant_filtered_examples
|
|
expect(default_examples.count).to eq(1)
|
|
|
|
ex = default_examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('Running tests tagged with all of [:quarantine, :foo]')
|
|
end
|
|
end
|
|
|
|
context "with 'foo' and 'bar' tagged" do
|
|
before do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter = { bar: true, foo: true }
|
|
end
|
|
end
|
|
after do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter.clear
|
|
end
|
|
end
|
|
|
|
it "runs tests tagged either 'foo' or 'bar'" do
|
|
group = RSpec.describe do
|
|
example 'foo', :foo do
|
|
end
|
|
example 'bar', :bar do
|
|
end
|
|
example 'foo and bar', :foo, :bar do
|
|
end
|
|
end
|
|
|
|
group.run
|
|
expect(group.examples.count).to eq(3)
|
|
|
|
ex = group.examples.find { |e| e.description == "foo" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = group.examples.find { |e| e.description == "bar" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = group.examples.find { |e| e.description == "foo and bar" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
end
|
|
|
|
it "skips quarantined tests tagged 'foo' and/or 'bar'" do
|
|
group = RSpec.describe do
|
|
example 'foo in quarantine', :foo, :quarantine do
|
|
end
|
|
example 'foo and bar in quarantine', :foo, :bar, :quarantine do
|
|
end
|
|
end
|
|
|
|
group.run
|
|
expect(group.examples.count).to eq(2)
|
|
|
|
ex = group.examples.find { |e| e.description == "foo in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('In quarantine')
|
|
|
|
ex = group.examples.find { |e| e.description == "foo and bar in quarantine" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('In quarantine')
|
|
end
|
|
|
|
it "ignores quarantined tests not tagged either 'foo' or 'bar'" do
|
|
group = RSpec.describe do
|
|
example 'in quarantine', :quarantine do
|
|
end
|
|
end
|
|
|
|
group.run
|
|
|
|
ex = group.examples.find { |e| e.description == "in quarantine" }
|
|
expect(ex.execution_result.status).to be_nil
|
|
end
|
|
end
|
|
|
|
context "with 'foo' and 'bar' and 'quarantined' tagged" do
|
|
before do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter = { bar: true, foo: true, quarantine: true }
|
|
end
|
|
end
|
|
after do
|
|
RSpec.configure do |config|
|
|
config.inclusion_filter.clear
|
|
end
|
|
end
|
|
|
|
it "runs tests tagged 'quarantine' and 'foo' or 'bar'" do
|
|
group = RSpec.describe do
|
|
example 'foo', :foo do
|
|
end
|
|
example 'bar and quarantine', :bar, :quarantine do
|
|
end
|
|
example 'foo and bar', :foo, :bar do
|
|
end
|
|
example 'foo, bar, and quarantine', :foo, :bar, :quarantine do
|
|
end
|
|
end
|
|
|
|
group.run
|
|
expect(group.examples.count).to eq(4)
|
|
|
|
ex = group.examples.find { |e| e.description == "foo" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('Running tests tagged with all of [:bar, :foo, :quarantine]')
|
|
|
|
ex = group.examples.find { |e| e.description == "bar and quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
|
|
ex = group.examples.find { |e| e.description == "foo and bar" }
|
|
expect(ex.execution_result.status).to eq(:pending)
|
|
expect(ex.execution_result.pending_message).to eq('Running tests tagged with all of [:bar, :foo, :quarantine]')
|
|
|
|
ex = group.examples.find { |e| e.description == "foo, bar, and quarantine" }
|
|
expect(ex.execution_result.status).to eq(:passed)
|
|
end
|
|
end
|
|
end
|