Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 4 PHPunit,不截断SQLite中的表_Php_Sqlite_Symfony_Doctrine Orm_Phpunit - Fatal编程技术网

Symfony 4 PHPunit,不截断SQLite中的表

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

我试图在我的symfony4.4应用程序中用PPHunit设置一个简单的测试,但是测试数据库(SQLite)似乎没有被截断

因此,它将在您第一次运行它时起作用,但之后不会起作用,因为自动增量列id不会重置

这很奇怪,因为直到最近我还在做另一个项目:

// 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