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.
PHPUnit
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 tests/Controller/CountryApiTest.php
:
./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.
Phpspec
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 src/Sylius/Component/Order/spec/Model/OrderItemSpec.php
.
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%
by Deji Akala via SitePoint
No comments:
Post a Comment