当前位置: 首页 > 知识库问答 >
问题:

Laravel测试不会在每次测试后回滚事务

柴琦
2023-03-14

迁移工作得很好,但事务根本不起作用。

我尝试公开我的设置:

  • 运行在docker容器中的MariaDB 10.1(我已经证明了测试中使用的所有表都在InnoDB中,因此支持事务处理)
  • 基测试类正在使用refreshdatabase
  • 我尝试了一个单独的连接与$ConnectionStorTransact一起进行测试,并使用默认连接进行测试。事务也不起作用
protected function setUp()
{
    parent::setUp();

    Queue::fake();
}

共有1个答案

鄢翰藻
2023-03-14

您可能正在使用model::truncate()

不幸的是,truncate()与MySQL 5.1.32以来的事务不“兼容”。可以删除表,但不能在事务中truncate()

http://dev.mysql.com/doc/refman/5.1/en/truncate-table.html

    null
 类似资料:
  • 我将此文档用于集成测试:ASP.NET核心集成测试,这是我的简化集成测试: 正如您所看到的,我正在向“/API/v1/application/acceptoffer”API发送一个HTTP请求,该API更新数据库中的一些实体,如果一切正常,则返回状态代码200。 一个解决方案是使用DbContext的单例,然后将所有测试包装在事务中,但问题是SQL不支持嵌套事务,如果API也使用事务,它将引发运行

  • 问题内容: 我正在运行一个简单的JUnit测试,又是一个应用程序DAO。问题是我总是得到: JUnit测试是: 如你所见,我明确声明不回滚此方法。 Spring JUnit支持是否总是将rollback设置为true? 问题答案: 它应该可以正常工作,就像你期望的那样,但是可能是你在被测类中打开了另一个事务,或者某个地方有其他功能/或错误。 顺便说一句,这个注释应该是足够的:

  • 我正在努力做一个工作junit测试,以回滚在骆驼路由过程中发生的操作。 我有一个骆驼路线设置,可以监听目录。它需要一个csv文件。当csv文件出现时,它会创建新的SearchAnalytics数据。它会在csv文件中的每一行向表中添加新行。 我放的默认的Spring事务方法似乎不适用于骆驼路由上发生的操作。 下面的代码可以工作。但是它会永久保存数据,并且不会回滚插入。这意味着测试只会通过一次,除非

  • 我在同一个测试类中有两个JUnit测试,每个都标记为@Transactional,第一个创建用户,第二个创建用户,并检查我们是否可以获得这些用户。 问题是,当第二个测试运行时,第一个测试创建的用户仍然在数据库中。 谢谢你抽出时间。

  • 测试将创建的数据保存在H2测试数据库中,随后的测试在测试套件中执行时将失败。 我如何用事务绕过类的所有测试,并在类的所有测试执行后回滚所有数据库修改?