我正在使用本地数据库编写测试,我知道不建议使用实际数据库,但不使用它对我来说并不是一个真正的选择。目前我面临的问题是我的测试执行速度比数据放入数据库的速度快。
$container = self::$container;
$service = $container->get(CartService::class);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
$cart=$service->getCart($user);
$service = $container->get(CartInfoService::class);
$test = $service->getFullCartData($cart, $user);
方法 addItem
将一个项目添加到我的数据库中。方法 getFullCartData
,从数据库中获取那些 items
的数据。如果我这样做,我会收到此错误 Error: Call to a member function matching() on null
,这意味着我正在尝试获取尚不存在的 items
。如果我将 addItem
方法放入在此之前运行的单独测试中,则一切正常,但我真的不喜欢这个解决方案
目前的解决方案:
public function testTest()
{
$user = $this->entityManager->getRepository(AdminUser::class)->findOneBy(array('id'=>4));
$boxitem = $this->entityManager->getRepository(BoxItem::class)->findOneBy(array('id'=>149));
$parameters=[
'integrity'=> 100,
'quantity'=> 1,
'price'=> 500
];
$container = self::$container;
$service = $container->get(CartService::class);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
$service->addItem($user, $boxitem, $parameters);
}
public function testGetFullCartData()
{
$user = $this->entityManager->getRepository(AdminUser::class)->findOneBy(array('id'=>4));
$container = self::$container;
$service = $container->get(CartService::class);
$cart=$service->getCart($user);
$service = $container->get(CartInfoService::class);
$test = $service->getFullCartData($cart, $user);
var_dump($test);
}
在我尝试获取它之前,有没有办法让测试等待查询执行或以其他方式设置添加项目?