对于Symfony2功能测试,验证数据库内容的最佳做法是什么?

时间:2015-11-06 20:41:02

标签: php symfony phpunit automated-tests functional-testing

我看到有很多方法可以将夹具数据加载到数据库中。但是在功能测试之后,确认写入数据库的内容的最佳/标准方法是正确的吗?

phpunit包有一个完整的部分,你可以在其中加载数据集,然后使用assertTablesEqual()之类的东西来比较表的内容和预期的内容。但这似乎在Symfony2下无法使用,我无法找到任何其他标准方法。

其他人如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Symfony2默认使用doctrine ORM,或者你可以设置其他数据库gestion(例如MongoDB)。检查app\config\parameters.php文件以设置数据库连接,并app\config\config.php检查/设置gestion类型。使用ORM,您不需要检查很多东西作为phpunit包,因为它已经集成到protocole等等。 Check here for more details

如果要加载datafixtures,可以导出实际的数据库进行保存,或者创建一个新数据库,仅用于测试和切换app\config\parameters.php中的数据库,方法是创建一个这样的新数据库app\config\parameters_dev.php。在这种情况下,网站和本地版本将不使用相同的数据库。您还可以修改app\config\parameters.php并阻止使用.gitgnore文件上传。{/ p>

答案 1 :(得分:0)

以下是包含数据库结果的测试集的示例。如果您需要在测试中直接与数据库交互,则可以使实体管理器可用于测试。有关更多信息,请参阅this bit of documentation。请注意,结果通常在网页中显示,并由DOM搜寻器读取。

public function setUp()
{
    self::bootKernel();
    $this->em = static::$kernel->getContainer()
            ->get('doctrine')
            ->getManager()
    ;
    $this->tool = static::$kernel->getContainer()
            ->get('truckee.toolbox')
    ;

    $classes = array(
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadFocusSkillData',
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadMinimumData',
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadStaffUserGlenshire',
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadStaffUserMelanzane',
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadOpportunity',
        'Truckee\VolunteerBundle\DataFixtures\SampleData\LoadVolunteer',
    );
    $this->loadFixtures($classes);
    $this->client = $this->createClient();
    $this->client->followRedirects();
}

public function testOutboxUser()
{
    $crawler = $this->login('admin');
    $link = $crawler->selectLink("Send alerts to organizations")->link();
    $crawler = $this->client->click($link);
    $outboxObj = $this->em->getRepository('TruckeeVolunteerBundle:AdminOutbox')->findAll();
    $outbox = $outboxObj[0];
    $recipient = $outbox->getRecipientId();
    $type = $this->tool->getTypeFromId($recipient);

    $this->assertEquals('staff', $type);
}