Sylius and Cutting Your Teeth on TDD
Sylius is an e-commerce application / framework based on Symfony. It boasts 100% code coverage, which is impressive for a PHP application of that size. In this article, we are going to walk through the different kinds of tests available and try out some Test and Behavior Driven Development (TDD/BDD). See the Sylius installation guide page for instructions, as this article assumes you have a working installation with example data and you can run Behat, PHPUnit and phpspec tests.
In the web root, there’s a
src folder which holds all Sylius-related code. This allows you to make use of the
app folder for your application development without unnecessarily treading on Sylius’ toes. As we are interested in test-driven development (first, write tests that fail before writing the code) let’s dive in, the Sylius way.
We start by setting up our test database.
php bin/console doctrine:database:create --env=test php bin/console doctrine:schema:create --env=test
Types of Sylius Tests
Some of the basics of the tools below have already been covered in this post, but we’ll recap them here on Sylius examples to keep with the theme.
Sylius comes with a lot of PHPUnit functional tests. The configuration file,
phpunit.xml.dist, is in the web root and the unit tests are in the
tests folder. From the root of our application, let’s run tests in
./vendor/phpunit/phpunit/phpunit -c ./phpunit.xml.dist tests/Controller/CountryApiTest
The command is made up of 3 parts – path to PHPUnit, our configuration file and the unit test class. Open
tests/Controller/CountryApiTest.php and take a look at the class. It extends JsonApiTestCase which we can trace back to ApiTestCase and WebTestCase, part of the Symfony framework package.
Behavior Driven Development (BDD) emerged from Test Driven Development (TDD), focusing attention on how a user interacts with an application and how the application behaves. SpecBDD is the part of BDD which considers how the smaller bits of an application work together to make things happen.
Sylius is installed with
phpspec which is the tool required for this. In your root directory, there’s also the
phpspec.yml.dist configuration file. Specifications are written in PHP classes and may be grouped in suites.
Remember, Sylius is a big application so there are a lot of files. Open
The first thing to note is that no matter how deep the folder structure, you have specifications inside a
spec folder and the source code the tests apply to is easy to find. If you look at the level of the
spec folder, you’ll see
Model and inside it is an
OrderItem class. The spec for that class is
spec/Model/OrderItemSpec.php. Compare the functions and you can see how they are related.
When you run phpspec, you get more output with the
--verbose option and with
-fpretty you can get prettier outputs.
./bin/phpspec run -fpretty --verbose src/Sylius/Component/Order/spec/Model/OrderItemSpec.php
Continue reading %Sylius and Cutting Your Teeth on TDD%