behat-placeholder-extension
behat-placeholder-extension copied to clipboard
Behat placeholder extension
Behat Placeholder Extension
Problem to solve
If you test your application with external service you run into problems of non unique user input. For example registering a user with same email will fail as there is already a user inside your database with this email address.
Scenario: Register a new user
Given I fill in "email" with "[email protected]"
And I fill in "password" with "my_scret"
And I press "Register Now"
Then I should see "[email protected]" in the ".account-user" element
Scenario: Register a new user
Given set a random mail in "%email%" placeholder
And set a random password in "%password%" placeholder
And I fill in "email" with "%email%"
And I fill in "password" with "%password%"
And I press "Register Now"
Then I should see "%email%" in the ".account-user" element
Then I should see "Hello %email%" in the ".account-user" element
Also extracting an given value of newly generate user is possible.
Scenario: Register a new user and check id
[...]
When set placeholder "%user_id%" of "id" on Doctrine model "AppBundle:User" with "email" equals "%email%"
Then print placeholder value of "%user_id%"
Then I should see "%user_id%" in the ".account-user-id" element
All placeholder are compatible with foreign Context
arguments.
Installation
$ composer require espend/behat-placeholder-extension
# behat.yaml
default:
suites:
default:
contexts:
- espend\Behat\PlaceholderExtension\Context\PlaceholderContext
extensions:
espend\Behat\PlaceholderExtension\PlaceholderExtension: ~
Feature Steps
All placeholder are valid per Scenario scope. They are cleaned before and after every Scenario.
Given set a placeholder "%foobar%" with value "my_foobar"
Given set a random mail in "%mail%" placeholder
Given set a random password in "%password%" placeholder
Given set a random text with length "15" in "%text%" placeholder
Given set current date as "Y-m-d" format in "%date%" placeholder
Given print placeholder value of "%date%"
Given print all placeholder values
Doctrine
To interact with the underlying Database there also some Doctrine steps.
They only work on a Test Suite / Extension using Behat\Symfony2Extension
Given set placeholder "%foobar%" of "id" on Doctrine model "AppBundle:Car" with "name" equals "bmw"
Given set placeholder "%foobar%" of "id" on Doctrine model "AppBundle\Entity\Car" with "name" equals "bmw"
# behat.yaml
default:
suites:
default:
contexts:
- espend\Behat\PlaceholderExtension\Context\DoctrinePlaceholderContext
extensions:
# [...]
Behat\Symfony2Extension: ~
Behat\MinkExtension:
sessions:
default:
symfony2: ~
# composer.json
"behat/mink-extension": "*",
"behat/symfony2-extension": "*",
Placeholder Context Injection
If you want access to placeholders in you custom Context
you implement the espend\Behat\PlaceholderExtension\Context\PlaceholderBagAwareContextInterface
Interface
See PlaceholderContext
for a full working example
class PlaceholderContext implements Context, PlaceholderBagAwareContext {}
TODOs
- Pipe placeholder arguments for console command:
bin/behat --placeholder="%foobar%=foo"
- More Doctrine related steps
- More Placeholder specific steps