我通常使用Symfony Web测试用例来测试我的端点。在这种情况下,我只想测试一个存储库调用以持久保存新实体,因此我想避免使用Web测试客户端。
我首先使用Web测试客户端测试,POST到端点将使用存储库在SQLite数据库中创建实体。但是,如果我在测试中获取了存储库类并直接调用了创建方法,则它会在persist()
上失败,但例外情况为:
MyEntity类型的实体缺少字段' id'的已分配ID。此实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果您想要自动生成标识符,则需要相应地调整元数据映射。
我已使用
更新了架构 app/console doctrine:schema:update --force --env=test
但app/console doctrine:schema:validate --env=test
仍告诉我数据库不是最新的。这表明映射存在问题,但如果映射存在问题,为什么它会在生产中使用(使用MySql),或者为什么如果我使用Web测试客户端调用它呢?
ID的学说映射是:
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="IDENTITY")
*
* @var int
*/
private $id;