使用sqlite运行phpunit时夹具的Symfony问题

时间:2019-04-06 22:01:43

标签: php symfony phpunit

我正在尝试将symfony配置为使用sqlite进行测试。

composer.json(require-dev)

"doctrine/doctrine-fixtures-bundle": "^3.1",
"liip/functional-test-bundle": "~2.0@alpha",

config / packages / test / doctrine.yaml:

doctrine:
  dbal:
    driver: 'pdo_sqlite'
    url: 'sqlite:///%kernel.project_dir%/var/test.db3'

然后我做了这样的测试

class SimplestTest extends WebTestCase
{

private $fixtures;

public function setUp()
{
    $this->fixtures = $this->loadFixtures([
        MyFixtures::class
        ])->getReferenceRepository();
}

public function testToSeeIfItWorks()
{
    $this->assertTrue(true);
}
}

MyFixtures类扩展AbstractFixture并加载一些简单对象:

class MyFixtures extends AbstractFixture
{
public function load(ObjectManager $manager)
{

    $user1 = new User();
    $user1->setRoles(['ROLE_USER']);

    $manager->persist($user1);
    $manager->flush();

    $myFeed = new Feed();
    $myFeed->setName('Feed 1');
    $myFeed->setUrl('http://someurl');
    $myFeed->setUser($user1);

    $manager->persist($myFeed);
    $manager->flush();
}
}

运行测试时,我得到:

InvalidArgumentException: "App\Tests\DataFixtures\ORM\MyFixtures" is not a registered fixture

不知道为什么。有帮助吗?

谢谢

1 个答案:

答案 0 :(得分:1)

我想我知道出什么问题了。如果涉及灯具应从其扩展的类,则图书馆文档中似乎存在一个错误。在the documentation的状态下可以使用Doctrine\Common\DataFixtures\AbstractFixture,但这会使灯具无法自动加载。

您可以在DoctrineFixturesBundle documentation中阅读,该捆绑包将通过自动装配到实现doctrine.fixture.orm的任何类(例如ORMFixtureInterface)上来添加Doctrine\Bundle\FixturesBundle\Fixture标签。通过FixturesCompilerPass从实现接口的类中加载夹具。

如果将灯具的基类更改为Doctrine\Bundle\FixturesBundle\Fixture,则它应该起作用。

更新

夹具类的最上方必须位于App\DataFixtures命名空间中。

这是因为将名称空间配置为自动连线和自动配置。如果要将灯具文件保存在App\Tests\DataFixtures\下,请为config/services.yaml文件添加适当的配置:

services:
    App\Tests\DataFixtures\:
        resource: '../tests/DataFixtures'