Merge branch 'ce-9858-follow-up-on-a-bug-that-happens-when-using-a-factory-built-object-in-the-where-block-of-rspec-parameterized-tablesyntax' into 'master'

Fix and document an RSpec::Parameterized::TableSyntax edge-case

See merge request gitlab-org/gitlab-ce!25438
This commit is contained in:
Douglas Barbosa Alexandre 2019-02-21 19:57:14 +00:00
commit 7ff0c8ae57
2 changed files with 11 additions and 12 deletions

View File

@ -358,16 +358,11 @@ range of inputs, might look like this:
describe "#==" do describe "#==" do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
let(:project1) { create(:project) }
let(:project2) { create(:project) }
where(:a, :b, :result) do where(:a, :b, :result) do
1 | 1 | true 1 | 1 | true
1 | 2 | false 1 | 2 | false
true | true | true true | true | true
true | false | false true | false | false
project1 | project1 | true
project2 | project2 | true
project 1 | project2 | false
end end
with_them do with_them do
@ -380,6 +375,11 @@ describe "#==" do
end end
``` ```
CAUTION: **Caution:**
Only use simple values as input in the `where` block. Using procs, stateful
objects, FactoryBot-created objects etc. can lead to
[unexpected results](https://github.com/tomykaira/rspec-parameterized/issues/8).
### Prometheus tests ### Prometheus tests
Prometheus metrics may be preserved from one test run to another. To ensure that metrics are Prometheus metrics may be preserved from one test run to another. To ensure that metrics are

View File

@ -4,7 +4,6 @@ require 'spec_helper'
describe PrometheusMetric do describe PrometheusMetric do
subject { build(:prometheus_metric) } subject { build(:prometheus_metric) }
let(:other_project) { build(:project) }
it_behaves_like 'having unique enum values' it_behaves_like 'having unique enum values'
@ -16,17 +15,17 @@ describe PrometheusMetric do
describe 'common metrics' do describe 'common metrics' do
using RSpec::Parameterized::TableSyntax using RSpec::Parameterized::TableSyntax
where(:common, :project, :result) do where(:common, :with_project, :result) do
false | other_project | true false | true | true
false | nil | false false | false | false
true | other_project | false true | true | false
true | nil | true true | false | true
end end
with_them do with_them do
before do before do
subject.common = common subject.common = common
subject.project = project subject.project = with_project ? build(:project) : nil
end end
it { expect(subject.valid?).to eq(result) } it { expect(subject.valid?).to eq(result) }