Cucumber step inception
I learned that you can call a cucumber step inside another one. Super cool!
Image a simple step like this:
Then /^I should see "(.*)"$/ do |text| expect(page).to have_content(text) end
Now you have modals on your web app and you need to restrict this assertion to inside the modal.
So you can start to duplicate the step above to match the
within modal and all the ones that could be reusable with modals.
Or you can create a new generic step that scope into the modal and calls your original step, such as:
And /^(.*?) within the modal$/ do |step_definition| within ".modal", visible: true do step step_definition end end
Now you can call both steps in your gherkin files:
Then I should see "Hello World!"
Then I should see "Hello World!" within the modal
Just be careful with generic and reusable steps. The idea is to help developers and not confuse them.
reference: Cucumber wiki - call step from step definition
h/t Taylor MockTweet