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

Signed-off-by: NRémy Coutable <remy@rymai.me>
上级 e0fc809b
...@@ -358,16 +358,11 @@ range of inputs, might look like this: ...@@ -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 ...@@ -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
......
...@@ -4,7 +4,6 @@ require 'spec_helper' ...@@ -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 ...@@ -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) }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册