为什么symfony的DOMCrawler对象不依赖PHPUnit测试之间正确地传递?(Why ar

2019-09-19 00:44发布

我有一个测试套件PHPUnit的我的symfony应用程序。 在该测试文件,我有不同的测试之间的一些依赖,并通过依赖之间的DOMCrawler对象,这样我就不用每次都来找到它。

然而,在考虑,我没有办法,看来你不能提交与这些传递的对象形式,但你可以点击他们的链接。 是否有一个原因? 是我设计的只是可怜的,如果是这样,我应该如何改变呢? 欢迎任何的反馈。 我下面附加了一些代码。

<?php

namespace someBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

/**
 * blah Controller Test
 * 
 */
class BlahControllerTest extends WebTestCase
{

    private $adminUrl;

    /**
     * Constructs basic information for a audit report controller test suite
     *
     */
    public function __construct()
    {
        $this->adminUrl = '/admin/';
    }

    /**
     * Starts a test suite 
     *
     * @return Crawler
     */
    public function testAdd()
    {
        // Create a new client to browse the application
        $client = static::createClient();

        // Go to site specific admin url
        $crawler = $client->request('GET', $this->adminUrl);
        $this->assertTrue(200 === $client->getResponse()->getStatusCode());

        // do stuff here

        // goes to edit page
        $crawler = $client->request('GET', $editPage);

        return $crawler;
    }

    /**
     * Tests the edit functionality
     *
     * @param Crawler $crawler Crawler for the show view
     *
     * @depends testAdd
     */
    public function testEdit($crawler)
    {
        // Create a new client to browse the application
        $client = static::createClient();

        //Line below is included if the crawler points to the show view
        //$crawler = $client->click($crawler->selectLink('Edit')->link());

        // Fill in the form and submit it
        $form = $crawler->selectButton('Edit')->form(array(
            $foo => $bar,
        ));

        // The following line doesn't work properly if testEdit is passed the
        // edit page. However, if it is passed the show page, and the 
        // edit link above is clicked, then the form will submit fine.
        $client->submit($form);
        $crawler = $client->followRedirect();

        // more code here...
    }
}

Answer 1:

原因是,你可以在看WebTestCase你扩展类,一拆机实现:

protected function tearDown()
{
    if (null !== static::$kernel) {
        static::$kernel->shutdown();
    }
}

内核的这种关机有很多的影响。 一个影响是,你正在经历。 我试图追查什么究竟发生了一次,但我没有得到任何地方,只是在心里记客户端和爬虫都没什么用,一旦关闭被调用。

我会建议同样的事情路易斯:让你的测试影响无关。 除此之外,它不是与客户一起工作,想想时候,你的东西创建页面上打破。 实际上,你的编辑页面测试也打破,虽然网页本身可能是好的。

取决于通常用于进一步验证一样,如果你想测试的效应初探多一点深入的对象。 你会使用不同的测试,并返回从第一个响应。 在这种情况下,它也确定这两个测试打破,因为如果你创建分页符,当然你的回应内容看起来并不像它应该。



文章来源: Why are symfony DOMCrawler objects not properly passed between dependent phpunit tests?