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


For Symfony2 functional testing, what is the best practice for verifying database contents?

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

phpunit包有一个完整的部分,您可以在其中加载数据集,然后使用assertTablesEqual()等方法将表的内容与预期内容进行比较。但这在Symfony2下似乎不可用,而且我找不到任何其他标准方法。

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

Symfony2默认使用原则ORM,也可以设置其他数据库管理(例如MongoDB)。检查app'config'parameters.php文件以设置数据库连接,检查app'config'config.php文件以检查/设置管理类型。使用ORM,您不需要检查phpunit包中的许多内容,因为它已经集成到协议中等等。查看此处了解更多详细信息。

如果您想加载数据像素,您可以导出实际的数据库来保存它,或者创建一个新的数据库,只用于测试app'config'parameters.php中的数据库,并通过创建一个类似于此app'config'parameters_dev.php的新数据库来切换数据库。在这种情况下,网站和您的本地版本将不会使用相同的数据库。您也可以编辑app'config'parameters.php,并阻止将其与.gitgnore文件一起上载。

下面是一个包含数据库结果的测试集示例。如果您需要在测试中直接与数据库交互,则可以使实体管理器可用于测试。有关更多信息,请参阅这部分文档。请注意,结果通常显示在网页中,并由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);
}