如何在Symfony 5中运行WebTestCase之前加载固定装置?
在不安装任何额外的捆绑程序的情况下,你使用哪些方法?
class MyPageControllerTest extends WebTestCase
{
public function testIndexAction()
{
$client = static::createClient();
$crawler = $client->request('GET', '/');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$table = $crawler->filter('.table-emp');
$this->assertCount(1, $table->filter('tbody tr'));
}
}
WebTestCase
扩展了Symfony的 KernelTestCase
它扩展了PHPUnit的TestCase。PhpUnit有几个重要的方法。
// executed once before the first test
public static void setUpBeforeClass();
// executed once before the last test
public static void tearDownAfterClass();
// executed once for every test before it starts
public void setUp();
// executed once for every test after it ends
public void tearDown();
如果你想为每次测试都有一个新鲜的测试数据库,我会创建一个bash脚本,执行MySQL文件,并让你的数据到位。这样做可以让你对发生的事情和地点有很多控制。
我认为,为了创建一些可重用和一致的东西,你可以创建自己的测试案例,可以扩展现有的Symfony Web测试案例。
这样你将获得一个额外的抽象层,你可以把所有的夹具设置和所有其他可能需要的额外功能放在你的Web(或API,如果你做同样的API)测试中。
另一个不需要使用额外的类的解决方案可以涉及到traits,并把你的功能放在那里。
我个人建议使用自定义的父类,其中包含一些特征,这些特征可以在不同类型的测试之间共享功能,如
class MyAwesomeParentTestClass
{
use AwesomeFeatureTrait;
use CustomAssertionsTrait;
}
我知道你不想使用额外的捆绑,所以这只是一个额外的建议。如果你决定使用捆绑,我会推荐你使用这个。爱丽丝.