Ich möchte Leuchten in meinem Funktionstest anhängen (basierend auf LiipFunctionalTestBundle in symfony 2.8 Auch ist es eine Entwickler-Datenbank ich arbeite, kann ich immer noch die Geräte anhängen müssen, da ich haben:Wie appliquiere Fixtures im Liip-Funktionstest (symfony 2.8)? .
- regional Daten (Land, Region, Landkreis)
- vehicule Marken und Modelle
- ...
Folglich wird die DB gespült, die nach jedem Funktionstest für mich nicht schön sein.
HINWEIS: Anfügen Einrichtungen (ohne Spülen) über die Befehlszeile mit Erfolg arbeiten: php app/console doctrine:fixtures:load --append
also unter meinem Funktionstest ist:
<?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']));
}
// ..
}
Dieser Test spült die DB. Also habe ich versucht, den vorgeschlagenen Code in link durch diese Änderung zu tun:
// 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');
Aber Funktionstest doest nicht funktionieren.
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
Ich versuchte loadFixtures Optionen, die in der Funktion verwendet() durch diese Änderung zu tun:
// 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);
Urteil: DB immer nach jedem Durchlauf des Funktionstests gespült wird.
Also, irgendwelche Vorschläge ??
Danke,
NB: Bündel Versionen in composer.json beschrieben
"doctrine/doctrine-fixtures-bundle": "dev-master",
"phpunit/phpunit": "5.4.*",
"liip/functional-test-bundle":"1.6.*",
"guzzle/guzzle": "v3.9.*"
Gibt es einen Grund dafür, keine separate Datenbank für Funktionstests zu verwenden, wie es sonst zu erwarten wäre? – geoB
Ich bin offen für alle Ideen. Sie haben einen Link oder ein Beispiel? –
Verwenden Sie die SQLite-Datenbank wie in der Konfiguration des Bundles beschrieben? –