Symfony 4 PHPunit,不截断SQLite中的表
我试图在我的symfony4.4应用程序中用PPHunit设置一个简单的测试,但是测试数据库(SQLite)似乎没有被截断 因此,它将在您第一次运行它时起作用,但之后不会起作用,因为自动增量列id不会重置 这很奇怪,因为直到最近我还在做另一个项目:Symfony 4 PHPunit,不截断SQLite中的表,php,sqlite,symfony,doctrine-orm,phpunit,Php,Sqlite,Symfony,Doctrine Orm,Phpunit,我试图在我的symfony4.4应用程序中用PPHunit设置一个简单的测试,但是测试数据库(SQLite)似乎没有被截断 因此,它将在您第一次运行它时起作用,但之后不会起作用,因为自动增量列id不会重置 这很奇怪,因为直到最近我还在做另一个项目: // tests/BaseWebTestCase.php protected function tearDown(): void { parent::tearDown(); $purger = new ORMPurger($thi
// tests/BaseWebTestCase.php
protected function tearDown(): void
{
parent::tearDown();
$purger = new ORMPurger($this->em);
$purger->setPurgeMode(ORMPurger::PURGE_MODE_TRUNCATE);
$purger->purge();
}
但也许最近的更新意味着它不再工作了。我如何更新它,以便每次运行测试时都截断表
运行测试时,出现以下错误:
There was 1 error:
1) App\Tests\Controller\BlogPostControllerTest::testAUserCanAccessBlogPost
Error: Call to a member function getId() on null
/home/vagrant/code/tests/Controller/BlogPostControllerTest.php:26
ERRORS!
Tests: 1, Assertions: 0, Errors: 1.
这是我的测试:
// tests/Controller/BlogPostControllerTest.php
public function testAUserCanAccessBlogPost()
{
$blogPost = $this->em
->getRepository(BlogPost::class)
->findOneBy([
'id' => rand(1, 20)
]);
$this->client->request('GET', '/' . $blogPost->getId());
$this->assertEquals(200, $this->client->getResponse()->getStatusCode());
}
和固定装置功能:
public function load(ObjectManager $manager)
{
$faker = Factory::create('en_GB');
// Create blog posts
for ($i = 0; $i < 20; $i++) {
$blogPost = new BlogPost();
$blogPost->setTitle($faker->sentence(3));
$blogPost->setBody($faker->paragraph);
$manager->persist($blogPost);
}
$manager->flush();
}
测试将运行一次,但如果我再次运行,则会失败,因此原始问题仍然存在。您没有任何错误吗?如果使用原则:fixtures:load with--purge with truncate,会发生什么情况?是的,由于测试找不到ID,我收到了错误。我将更新原始问题我所说的与清除相关的错误,您显示的错误是由表中不存在的id引起的,因此对象为null。另外,你为什么用随机的?那么使用命令“条令:fixtures:load--purge with truncate”进行清除呢?感谢您的回复,
bin/console条令:fixtures:load--purge with truncate--env=test
会在sqlite中重置ID,但是我更希望在我的测试设置中发生这种情况。此外,夹具也加载到测试环境设置功能中。我使用random确保从装置中随机选择一个帖子,但我很高兴听到改进建议:)
sudo rm -rf var/cache