summaryrefslogtreecommitdiff
path: root/doc/development/testing.md
diff options
context:
space:
mode:
authorDouwe Maan <douwe@selenight.nl>2017-08-17 14:01:31 +0200
committerDouwe Maan <douwe@selenight.nl>2017-08-17 14:01:31 +0200
commit834f1b30d50dc3ad9d0f6ff81cef24dc6ebc375c (patch)
treee5f2e714e695d995649942111f29d4e857b33a67 /doc/development/testing.md
parent6aeb99c98bee304c5010a1173c47777eff1e04a5 (diff)
parentfe0ffcc78941bf9de98e3698e743c3cbb9846b6a (diff)
downloadgitlab-ce-834f1b30d50dc3ad9d0f6ff81cef24dc6ebc375c.tar.gz
Merge branch 'master' into issue-discussions-refactor
# Conflicts: # package.json # spec/support/features/reportable_note_shared_examples.rb
Diffstat (limited to 'doc/development/testing.md')
-rw-r--r--doc/development/testing.md37
1 files changed, 37 insertions, 0 deletions
diff --git a/doc/development/testing.md b/doc/development/testing.md
index c7eac3cf40c..efd56484b12 100644
--- a/doc/development/testing.md
+++ b/doc/development/testing.md
@@ -279,6 +279,43 @@ end
- Avoid scenario titles that add no information, such as "successfully".
- Avoid scenario titles that repeat the feature title.
+### Table-based / Parameterized tests
+
+This style of testing is used to exercise one piece of code with a comprehensive
+range of inputs. By specifying the test case once, alongside a table of inputs
+and the expected output for each, your tests can be made easier to read and more
+compact.
+
+We use the [rspec-parameterized](https://github.com/tomykaira/rspec-parameterized)
+gem. A short example, using the table syntax and checking Ruby equality for a
+range of inputs, might look like this:
+
+```ruby
+describe "#==" do
+ using Rspec::Parameterized::TableSyntax
+
+ let(:project1) { create(:project) }
+ let(:project2) { create(:project) }
+ where(:a, :b, :result) do
+ 1 | 1 | true
+ 1 | 2 | false
+ true | true | true
+ true | false | false
+ project1 | project1 | true
+ project2 | project2 | true
+ project 1 | project2 | false
+ end
+
+ with_them do
+ it { expect(a == b).to eq(result) }
+
+ it 'is isomorphic' do
+ expect(b == a).to eq(result)
+ end
+ end
+end
+```
+
### Matchers
Custom matchers should be created to clarify the intent and/or hide the