diff options
author | Douwe Maan <douwe@selenight.nl> | 2017-08-17 14:01:31 +0200 |
---|---|---|
committer | Douwe Maan <douwe@selenight.nl> | 2017-08-17 14:01:31 +0200 |
commit | 834f1b30d50dc3ad9d0f6ff81cef24dc6ebc375c (patch) | |
tree | e5f2e714e695d995649942111f29d4e857b33a67 /doc/development/testing.md | |
parent | 6aeb99c98bee304c5010a1173c47777eff1e04a5 (diff) | |
parent | fe0ffcc78941bf9de98e3698e743c3cbb9846b6a (diff) | |
download | gitlab-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.md | 37 |
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 |