smarin / behat-placeholder-extension
Behat placeholder extension
Requires
- php: >=7.0
- behat/behat: ~3.0
Requires (Dev)
- behat/gherkin: ^4.5
- behat/symfony2-extension: ^2.1
- doctrine/common: ~2.0
- phpunit/phpunit: ^6.0
- symfony/property-access: ~3.0
Suggests
- behat/symfony2-extension: Allows usages for Doctrine context
- doctrine/common: Needed to support Doctrine context
This package is auto-updated.
Last update: 2024-10-29 04:20:11 UTC
README
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 "foo@exmaple.com"
And I fill in "password" with "my_scret"
And I press "Register Now"
Then I should see "foo@exmaple.com" 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
$ php composer.phar 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