Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set up Doctrine2 fixtures when testing with PHPUnit?

I'm trying to get started with Symfony2 and have been trying to set up automated testing for the model layer of my application. The Symfony2 book talks about unit testing for controllers but I can't find many examples of model testing.

I would like to have a clean data set to work with before each test runs and found these articles:

  • http://blog.sznapka.pl/fully-isolated-tests-in-symfony2/
  • http://symfony.com/doc/current/cookbook/doctrine/doctrine_fixtures.html

Based on the sznapka.pl article I have a test actually running without errors, but although the test schema is created the fixtures don't load. I can't see why, or even a way to debug this.

Background: I've previously worked with CakePHP where the loading of fixtures is largely handled automatically, maybe I have the wrong approach for Symfony/Doctrine?

like image 373
contrebis Avatar asked Jul 08 '11 14:07

contrebis


2 Answers

Have a look at this solution. I don't think using transactions is the best idea, since chances are that you'll use transactions in your code. This solution suggests to load fixtures manually in each of your test.

like image 41
Reza S Avatar answered Sep 25 '22 18:09

Reza S


Yes DoctrineFixtures are a good choice.

To test model: you don't really need to load fixtures in the database, you should create objects with the data you want (by injecting it with setters).

To test controller: load doctrine fixtures and use doctrine transactions so the state of your database is the same before each testcase, begin transaction in setUp() and rollback in tearDow(). (If your controller use transactions too i haven't found a good solution yet).

For fixtures error, if you don't have any error and your fixtures aren't loaded maybe you have missed a naming convention. Can you show us some code ?

like image 129
julesbou Avatar answered Sep 24 '22 18:09

julesbou