php - 在 Codeception 中的测试之间保留数据库

标签 php laravel-5 codeception

我正在使用 Codeception 验收测试来测试用 L5 编写的 CRUD 应用程序。我想知道你们是怎么做到的。

我最初认为我可以使用 CEST 并使用 @depends 属性来指定顺序,但似乎每次测试后都会运行自动数据库清理,所以在我插入下一次测试无法在数据库中找到该记录。

有没有一种方法可以做到这一点,而无需专门制作专门用于测试的数据库转储?

我希望能够按此顺序进行以下测试:

  • 创建项目
  • 阅读项目
  • 更新项目
  • 删除项目

并在每个阶段检查数据库以确保其成功。

如有任何帮助,我们将不胜感激。

干杯, 达里尔

最佳答案

此处指定的默认行为绝对是您想要的。您希望测试能够独立执行。如果你想再次重新测试一个区域,因为它已经坏了,你不必返回并再次运行你以前的测试,让它处于正确的状态,以便再次运行测试。

单个失败的测试会让您更好地了解失败的位置,而不是多个失败的测试,因为所有其他测试所依赖的测试都失败了,这就是您所描述的方法适用于的情况。

如果您考虑一下,假设您正在进行测试驱动开发。您使用创建记录的正确数据编写了一个破坏性测试。其他测试是读取、更新、再次读取、删除记录、更新不同的记录、创建另一个新记录并再次读取。删除失败,创建和读取测试失败,因为您重新插入了相同的索引。但是,这些测试不会告诉您,您只会得到 4 个失败的测试,并且您将必须检查所有失败的测试,以及哪个测试导致其他测试失败,如果确实如此。你不会知道的。

如果您按照默认行为告诉您的去做,您将只有一个失败的测试,然后您就可以解决问题。死的容易。您只需在出现测试用例时将其添加到数据库中即可。

如果您想检查数据库中的内容,可以通过在同一个测试中查询两次来实现。执行您的更新查询,然后对您刚刚完成的操作运行您的选择查询,并将 do and equals 作为另一个断言。如果您设置正确并且没有出现错误,您可以相信数据库已经运行了您的查询,但是您更了解您的应用程序。例如,您可能正在运行触发器。

我相信您可以在配置中使用这种东西来停止行为,但这不是您想要的!

class_name: FunctionalTester
modules:
    enabled: [Filesystem, FunctionalHelper, Laravel4, Asserts]
    config:
        Laravel4:
            environment: 'testing'
            cleanup: false

关于php - 在 Codeception 中的测试之间保留数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28531459/

相关文章:

php - 循环中使用ajax进行同步请求

php - 是否可以添加来自数据库的 jQuery slider ?

php - 如何在 Laravel 5 中使用 php DateTime() 函数

php - 使用 Codeception 和 Laravel 进行登录测试

php - 设置 Codeception 时无法连接到数据库

php - 多个唯一值 MYSQL

php - 在 WHERE 语句中使用相同的列名,使用 "AND"而不是 "OR"

php - 由管理员注销特定用户 Laravel 5.2

php - Laravel 多对多数据透视表不同的数据库

Codeception:调用未定义的方法 FunctionalTester::expectException