我想第一次使用Prophecy("phpspec/prophecy-phpunit")为我的类创建单元测试.我想测试一个在同一个服务中调用另一个函数的函数,这里是代码:
class UserManager
{
private $em;
private $passwordHelper;
public function __construct(\Doctrine\ORM\EntityManager $em, \MainBundle\Helper\PasswordHelper $passwordHelper)
{
$this->em = $em;
$this->passwordHelper = $passwordHelper;
}
public function getUserForLdapLogin($ldapUser)
{
$dbUser = $this
->em
->getRepository('MainBundle:User')
->findOneBy(array('username' => $ldapUser->getUsername()));
return (!$dbUser) ?
$this->createUserFromLdap($ldapUser) :
$this->updateUserFromLdap($ldapUser, $dbUser);
}
Run Code Online (Sandbox Code Playgroud)
我遇到的第一个问题是我正在使用findOneByUsername和预言,据我所知,不允许你:模拟魔术方法(_callfor EntityRepository),不存在的模拟方法,模拟你正在测试的类.如果这些都是真的我有点腌渍,这意味着我不能测试这个函数而不测试类中的其他函数.
到目前为止,我的测试看起来像这样:
class UserManagerTest extends \Prophecy\PhpUnit\ProphecyTestCase
{
public function testGetUserForLdapLoginWithNoUser()
{
$ldapUser = new LdapUser();
$ldapUser->setUsername('username');
$em = $this->prophesize('Doctrine\ORM\EntityManager');
$passwordHelper = $this->prophesize('MainBundle\Helper\PasswordHelper');
$repository = $this->prophesize('Doctrine\ORM\EntityRepository');
$em->getRepository('MainBundle:User')->willReturn($repository);
$repository->findOneBy(array('username' => 'username'))->willReturn(null);
$em->getRepository('MainBundle:User')->shouldBeCalled(); …Run Code Online (Sandbox Code Playgroud) 我正在使用SonataAdminBundle在Symfony 2中生成一个后台并管理一些实体。我已经添加了我在创建表单想要的所有属性,并Soanta产生的三个键一视图:Create,Create and return to list,Create and add another。
现在,无论我选择保存表单的哪个按钮,Sonata都会重定向我进行编辑。我该如何更改?为什么它创建了按钮但不执行重定向?