我正在尝试将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
不知道为什么。有帮助吗?
谢谢
答案 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'