我在phpunit中的實體管理器存在問題。Symfony 2中的實體管理器和phpunit問題
這是我的測試:
public function testValidChangeEmail()
{
$client = self::createAuthClient('user','password');
$crawler = $client->request('GET', '/user/edit/30');
$crawler = $client->submit($crawler->selectButton('submit')->form(array(
'form[email]' => '[email protected]',
)));
/*
* With this em, this work perfectly
* $em = $client->getContainer()->get('doctrine.orm.entity_manager');
*/
$user = self::$em->getRepository('MyBundle:User')->findUser('[email protected]');
die(var_dump($user->getEmail()));
}
,這是我WebTestCase延伸原有WebTestCase:
class WebTestCase extends BaseWebTestCase
{
static protected $container;
static protected $em;
static protected function createClient(array $options = array(), array $server = array())
{
$client = parent::createClient($options, $server);
self::$em = $client->getContainer()->get('doctrine.orm.entity_manager');
self::$container = $client->getContainer();
return $client;
}
protected function createAuthClient($user, $pass)
{
return self::createClient(array(), array(
'PHP_AUTH_USER' => $user,
'PHP_AUTH_PW' => $pass,
));
}
正如你所看到的,我替換自:: $ EM我創造我的時候客戶。
我的問題:
在我的測試中,die()
給我的舊電子郵件,而不是已經在測試註冊新的電子郵件([email protected]
)。但是在我的數據庫中,我正確保存了[email protected]
。
當我在數據庫中檢索我的用戶時,我使用sefl::$em
。如果我在評論中使用$em
,我將檢索正確的新電子郵件。
我不明白,爲什麼在我的WebTestCase,我可以接觸到新的實體管理器...
邊注:爲什麼地球上你死(的var_dump()),既不做的var_dump返回任何有用的事情,也不應該需要模具()在測試的中間。 – conny