Rey*_*rPM 3 testing phpunit functional-testing symfony doctrine-orm
我正在尝试在功能测试期间禁用"软可删除"过滤器,我按以下方式执行:
第一个选项:尝试tearDown()在我的测试中禁用:
protected function tearDown() {
parent::tearDown();
$entityUser = $this->em->getRepository("UserSecurityBundle:User")->find($this->user->getUser()->getId());
$filter = $this->em->getFilters()->disable('softdeleteable');
$this->em->remove($entityUser);
$this->em->flush();
$this->em->close();
}
Run Code Online (Sandbox Code Playgroud)
没工作.
第二个选项:创建一个doctrine_test.yml并在config_test.yml中导入:
imports:
- { resource: config.yml }
- { resource: doctrine_test.yml }
- { resource: security_test.yml }
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我删除doctrine.yml并包含在config_prod.yml.
没工作.
这是我的doctrine_test.yml部分的样子:
filters:
softdeleteable:
class: Gedmo\SoftDeleteable\Filter\SoftDeleteableFilter
enabled: false
Run Code Online (Sandbox Code Playgroud)
第三个选项:禁用过滤器setUp():
public function setUp() {
static::$kernel = static::createKernel();
static::$kernel->boot();
$this->em = static::$kernel->getContainer()->get('doctrine')->getManager();
$fixture = new LoadFeeData();
$fixture->load($this->em);
$this->em->getFilters()->disable('softdeleteable');
$this->user = $this->createUser();
parent::setUp();
}
Run Code Online (Sandbox Code Playgroud)
没工作.
有什么建议?解?
经过一些研究,经过更多的测试,我找到了解决方案,见下文:
protected function tearDown() {
parent::tearDown();
$entityAccount = $this->em->getRepository("UserSecurityBundle:Account")->find(array("id" => $this->user->getId(), "user" => $this->user->getUser()->getId()));
$entityUser = $entityAccount->getUser();
$entityCompanyHasWtax = $this->em->getRepository("ApprovalBundle:CompanyHasWtax")->findOneBy(array("company" => $this->company, "wtax" => $this->fee, "user" => $this->user->getUser()->getId()));
foreach ($this->em->getEventManager()->getListeners() as $eventName => $listeners) {
foreach ($listeners as $listener) {
if ($listener instanceof \Gedmo\SoftDeleteable\SoftDeleteableListener) {
$this->em->getEventManager()->removeEventListener($eventName, $listener);
}
}
}
$this->em->remove($entityCompanyHasWtax);
$this->em->remove($entityAccount);
$this->em->remove($entityUser);
$this->em->flush();
$this->em->close();
}
Run Code Online (Sandbox Code Playgroud)
由于以这种方式禁用过滤器,Aparently Doctrine有一个错误:
$this->em->getFilters()->disable('softdeleteable');
Run Code Online (Sandbox Code Playgroud)
不起作用,善待他人
| 归档时间: |
|
| 查看次数: |
3095 次 |
| 最近记录: |