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