我正在使用 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/