使用 liip TestFixturesBundle 加载夹具时使用 setExcludedDoctrineTables 排除表
excluding tables with setExcludedDoctrineTables when loading fixtures with liip TestFixturesBundle
我正在尝试使用 Liip 测试包使用 FixturesTrait 的 loadFixtures() 方法从代码中加载固定装置
但是,我需要排除我不想在此过程中删除的资源 table。如果我理解正确,根据文档 https://github.com/liip/LiipTestFixturesBundle/blob/master/doc/database.md
使用 setExcludedDoctrineTables 方法应该很容易
不幸的是,当我 运行 此代码时, table RESOURCES 与所有其他资源一起被丢弃。
有人能看出原因吗?
不确定这是否相关,但我在单独的 docker 容器中使用 mysql 数据库。
<?php
namespace App\Tests\Controller;
use Symfony\Component\Panther\PantherTestCase;
use Symfony\Component\Panther\Client;
use Facebook\WebDriver\WebDriverBy as By;
use Facebook\WebDriver\Exception\TimeoutException;
use Liip\FunctionalTestBundle\Test\WebTestCase;
use Symfony\Component\Panther\PantherTestCaseTrait;
use Liip\TestFixturesBundle\Test\FixturesTrait;
use App\Repository\UserRepository;
use App\DataFixtures\UserFixtures;
use App\DataFixtures\AccountFixtures;
abstract class AbstractPantherTest extends WebTestCase{
// use trait so we can combine Liip and Panther features
use PantherTestCaseTrait; // this is the magic. Panther is now available.
// provide fixtures loading feature
use FixturesTrait;
// @var Symfony\Component\Panther\Client
protected static $client;
//Initialize the test case
function setUp():void
{
static::bootKernel();
if(self::$client === null){
self::$client = self::createPantherClient(['browser' => PantherTestCase::FIREFOX]);
$this->setExcludedDoctrineTables(["RESOURCES"]);
$this->loadFixtures([
UserFixtures::class,
]);
// retrieve the test user
$userRepository = static::$container->get(UserRepository::class);
// retrieve the test user
$testUser = $userRepository->findOneByUsername('Administrator');
// simulate $testUser being logged in
self::doLogin($testUser->getUsername(), 'xxx');
}
}
}
回答我自己的问题,因为我刚刚发现了这个问题。有时你只需要睡个好觉:)
所以这段代码确实有效。 table RESOURCES 被丢弃,因为在实现测试的具体 class 中重新定义了 setUp 方法,并且该重新定义包括对 loadFixtures 的另一个调用,但是对于不同的数据 class 并且没有排除:
<?php
namespace App\Tests\Controller;
use App\DataFixtures\DiscountFixtures;
class DiscountControllerWebTest extends AbstractPantherTest
{
function setUp():void
{
parent::setUp();
$this->loadFixtures([
DiscountFixtures::class,
]);
}
我正在尝试使用 Liip 测试包使用 FixturesTrait 的 loadFixtures() 方法从代码中加载固定装置 但是,我需要排除我不想在此过程中删除的资源 table。如果我理解正确,根据文档 https://github.com/liip/LiipTestFixturesBundle/blob/master/doc/database.md
使用 setExcludedDoctrineTables 方法应该很容易不幸的是,当我 运行 此代码时, table RESOURCES 与所有其他资源一起被丢弃。
有人能看出原因吗?
不确定这是否相关,但我在单独的 docker 容器中使用 mysql 数据库。
<?php namespace App\Tests\Controller; use Symfony\Component\Panther\PantherTestCase; use Symfony\Component\Panther\Client; use Facebook\WebDriver\WebDriverBy as By; use Facebook\WebDriver\Exception\TimeoutException; use Liip\FunctionalTestBundle\Test\WebTestCase; use Symfony\Component\Panther\PantherTestCaseTrait; use Liip\TestFixturesBundle\Test\FixturesTrait; use App\Repository\UserRepository; use App\DataFixtures\UserFixtures; use App\DataFixtures\AccountFixtures; abstract class AbstractPantherTest extends WebTestCase{ // use trait so we can combine Liip and Panther features use PantherTestCaseTrait; // this is the magic. Panther is now available. // provide fixtures loading feature use FixturesTrait; // @var Symfony\Component\Panther\Client protected static $client; //Initialize the test case function setUp():void { static::bootKernel(); if(self::$client === null){ self::$client = self::createPantherClient(['browser' => PantherTestCase::FIREFOX]); $this->setExcludedDoctrineTables(["RESOURCES"]); $this->loadFixtures([ UserFixtures::class, ]); // retrieve the test user $userRepository = static::$container->get(UserRepository::class); // retrieve the test user $testUser = $userRepository->findOneByUsername('Administrator'); // simulate $testUser being logged in self::doLogin($testUser->getUsername(), 'xxx'); } }
}
回答我自己的问题,因为我刚刚发现了这个问题。有时你只需要睡个好觉:)
所以这段代码确实有效。 table RESOURCES 被丢弃,因为在实现测试的具体 class 中重新定义了 setUp 方法,并且该重新定义包括对 loadFixtures 的另一个调用,但是对于不同的数据 class 并且没有排除:
<?php
namespace App\Tests\Controller;
use App\DataFixtures\DiscountFixtures;
class DiscountControllerWebTest extends AbstractPantherTest
{
function setUp():void
{
parent::setUp();
$this->loadFixtures([
DiscountFixtures::class,
]);
}