Je voudrais ajouter des appareils dans mon test fonctionnel (basé sur LiipFunctionalTestBundle en symfony 2.8 Même est une base de données de dev je travaille, je fais encore besoin d'ajouter les accessoires que je ferai:Comment ajouter des fixtures dans le test fonctionnel liip (symfony 2.8)? .
- régionale données (pays, région, département)
- marques et modèles
- VEHICULE ...
par conséquent, ayant la DB purgé après chaque test fonctionnel ne sera pas agréable pour moi.
AVIS: appareils Annexer (sans purge) par la ligne de commande travaille avec succès: php app/console doctrine:fixtures:load --append
Donc, voici mon test fonctionnel:
<?php
namespace Minn\APIBundle\Tests\Controller;
use Liip\FunctionalTestBundle\Test\WebTestCase as WebTestCase;
//use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as WebTestCase;
use Minn\APIBundle\Tests\Fixtures\Entity\LoadBrandData;
use Doctrine\Common\DataFixtures\Purger\ORMPurger;
class BrandControllerTest extends WebTestCase {
public function setUp() {
$this->auth = array(
'PHP_AUTH_USER' => 'restapi',
'PHP_AUTH_PW' => 'secretpw',
);
$this->client = static::createClient(array(), $this->auth);
}
public function testJsonGetPageAction() {
$fixtures = array('Minn\APIBundle\Tests\Fixtures\Entity\LoadBrandData');
$this->loadFixtures($fixtures);
$brands = LoadBrandData::$brands;
$brand = array_pop($brands);
$route = $this->getUrl('api_1_brand_get_brand', array('id' => $brand->getId(), '_format' => 'json'));
$this->client->request('GET', $route, array('ACCEPT' => 'application/json'));
$response = $this->client->getResponse();
$this->assertJsonResponse($response, 200);
$content = $response->getContent();
$decoded = json_decode($content, true);
$this->assertTrue(isset($decoded['id']));
}
// ..
}
Ce test purge le DB. Donc, j'ai essayé le code proposé dans link en faisant ce changement:
// removed code
$fixtures = array('Minn\APIBundle\Tests\Fixtures\Entity\LoadBrandData');
$this->loadFixtures($fixtures);
// new code
$this->runCommand('doctrine:fixtures:load --append --no-interaction --fixtures=src/Minn/APIBundle/Tests/Fixtures/Entity/LoadBrandData.php');
Mais, test fonctionnel doest fonctionne pas.
There was 1 error:
1) Minn\APIBundle\Tests\Controller\BrandControllerTest::testJsonGetPageAction
Error: Call to a member function getId() on null
/home/amine/NetBeansProjects/minnapi/src/Minn/APIBundle/Tests/Controller/BrandControllerTest.php:27
J'ai essayé de utiliser les options disponibles dans la fonction loadFixtures() en faisant ce changement:
// removed code:
$fixtures = array('Minn\APIBundle\Tests\Fixtures\Entity\LoadBrandData');
$this->loadFixtures($fixtures);
// new code
$fixtures = array('Minn\APIBundle\Tests\Fixtures\Entity\LoadBrandData');
$this->loadFixtures($fixtures, null,'doctrine', ORMPurger::PURGE_MODE_DELETE);
Verdict: DB est toujours purgé après chaque exécution du test fonctionnel.
Alors, des suggestions?
Merci,
NB: faisceaux versions décrites dans composer.json
"doctrine/doctrine-fixtures-bundle": "dev-master",
"phpunit/phpunit": "5.4.*",
"liip/functional-test-bundle":"1.6.*",
"guzzle/guzzle": "v3.9.*"
Existe-t-il une raison pour ne pas utiliser une base de données distincte pour les tests fonctionnels, comme on aurait pu s'y attendre? – geoB
Je suis ouvert à toutes les idées. Vous avez un lien ou un exemple? –
Utilisez-vous la base de données SQLite comme décrit dans la configuration de l'ensemble? –