There are many times in our Feature file when there is a situation where we have to test the positive as well as the negative scenario. The steps are almost same with a little change. Let’s suppose the following scenarios:
Scenario 1:
Given I do login to the site as a valid user
When I searched “Mobile” on home page
Then I should see “Mobile” results.
Scenario 2:
Given I do not login to the site as a valid user
When I searched “Mobile” on homepage
Then I should see “Mobile” results.
We have to write the following Step definitions for above scenarios:
Given(/^I do login to the site as a valid user$/) do
pending
end
Given(/^I do not login to the site as a valid user$/) do
pending
end
When(/^I searched “Mobile” on homepage$/) do
pending
end
Then(/^I should see “Mobile” results\.$/) do
pending
End
As we can see that in the first two step definitions there is only the difference of “do” and “not” word. So, we can optimise our code by writing these two step definitions into one step definition:
Given(/^I (do| do not) login to the site as a valid user$/) do
pending
end
This concept of writing the step definition is known as Optional Capture Group which eliminates the Step Definition duplication. So, now the same step definition can be used for both the positive and negative scenario. In the above scenario, we have used only two cases separated with the pipe symbol but we can use n number options in the group. Option 1 or Option 2 is passed as the capture value in the step definition.
There is one another concept of Optional noncapture Group in writing optimised Step Definition. If we add “?:” in the beginning of Optional Capture Group then it becomes Optional noncapture Group. Let’s suppose we consider the above Optional capture group example:
Given(/^I (do| do not) login to the site as a valid user$/) do
pending
end
If we do not want to capture the first option then we will put “?:” in beginning of first option inside the group.
Given(/^I (?: do| do not) login to the site as a valid user$/) do
pending
End
“I do login to the site as a valid user” will not captured but “I do not login to the site as a valid user” is captured for the Optional noncapture group.
0 Comment(s)