Symfony php单元测试使用模拟对象的形式和控制器

时间:2016-02-16 07:32:17

标签: symfony

嗨Guyz我在php单元测试中遇到困难你们中的任何人都可以创建一个与控制器相同的表单和单元测试它对我来说将是一个很大的帮助作为一个学生我们正在研究框架和symfony2是一个其中,php单元测试是其中一项功能所以我们需要了解它我希望有人可以帮助我不建议任何阅读链接因为我厌倦了阅读需要一个使用模拟对象的简单例子。 / p>

我在symfony 2中创建了一个简单的表单,任何人都可以使用模拟对象为此创建一个phpunit测试。

<?php
namespace App\MainBundle\Form\Exercises;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;


class TennisType extends AbstractType
{
     /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
         $builder
            ->add('sets',  'text',['attr'=>['maxlength'=>'3', 'size'=>'3'],'required' => false,])
            ->add('duration',  'text', ['attr'=> ['maxlength'=>'3', 'size'=>'3'],'required' => True,])
            ->add('intensity',  'choice', ['choices'=> ['low'=>'low', 'medium'=>'medium', 'high'=>'high', 'intense'=>'intense'],'required' => True,])
            ->add('unit',  'choice', ['choices'=> ['hour'=>'hour', 'min'=>'min'],'required' => True,])
            ->add('field', new ExerciseLogType())
            ;
    }


    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'App\MainBundle\Entity\Exercises\ExerciseLog'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'tennis_exerciselog';
    }
}

1 个答案:

答案 0 :(得分:1)

这是简单表单提交测试的示例。您可以使用警报工具提示获取创建是否正常的通知以及获取响应表单的爬虫。

$client = static::makeClient());

$crawler = $client->request('GET', self::ROUTE);

$form = $crawler->selectButton('Acme_mainbundle_produit[submit]')->form();
$form['Acme_mainbundle_produit[name]'] = 'PRODUIT TEST CREATE';

$client->submit($form);

$this->assertTrue($client->getResponse()->isRedirect(self::ROUTE));

$crawler = $client->followRedirect();

$this->assertTrue($crawler->filter('.alert.alert-success')->count() == 1);