我看到有很多方法可以将夹具数据加载到数据库中。但是在功能测试之后,确认写入数据库的内容的最佳/标准方法是正确的吗?
phpunit包有一个完整的部分,你可以在其中加载数据集,然后使用assertTablesEqual()之类的东西来比较表的内容和预期的内容。但这似乎在Symfony2下无法使用,我无法找到任何其他标准方法。
其他人如何解决这个问题?
答案 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);
}