【问题标题】:Is there any way to reset the mongoDB without deleting actual DB through cypress?有没有办法在不通过柏树删除实际数据库的情况下重置 mongoDB?
【发布时间】:2022-06-18 21:26:09
【问题描述】:

我想以这样一种方式实现 DB 的重置,即当我通过测试运行程序执行所有规范文件时,在第一个规范文件之前的开始创建 DB,并在每个规范文件之后发布 DB 应重置为其原始状态意味着应删除由于执行相应规范文件而在 DB 中创建的数据,并且 DB 应在运行下一个规范文件之前恢复到执行第一个规范文件之前的状态。这应该发生在每个规范文件上,最后在最后一个规范文件 DB 应该被删除之后。目前,DB 的创建和删除分别在 before 和 after 钩子中按预期处理。将在钩子本身之前处理重置操作。但是如何按预期重置 Db 呢?

【问题讨论】:

  • 我经常使用 Java 和 JUnit 执行此操作。在“安排”阶段考虑三 A(AAA - 安排、行动、断言)方法时,我确保系统在测试之前符合预期,这通常包括首先删除所有内容,然后添加特定数据以满足集成测试。由于我通常使用众所周知的数据库名称进行测试,因此我只需先删除数据库,这会删除包括索引在内的所有跟踪。为了完整起见,我还在最后删除了数据库。这只是清理工作。
  • @barrypicker 是的,但如果我在每次测试后删除数据库,然后在下一次测试之前再次删除,我需要再次创建它并按照相同的方式进行进一步测试。我计划重用我在第一次测试之前创建的同一个数据库,并将它重用于所有测试,只是在这些阶段清除记录而不是数据库,最后在所有测试完成后我会放弃它。问题是,如果我在第一次测试后使用相同的数据库而不删除它或清除其中的记录,那么由于第一次测试已经在应用程序中创建的数据,由于以前的测试数据,进一步的测试会失败。
  • 我想我不清楚为什么删除数据库并为每个测试重新创建它是一个问题。这种方法对我来说效果很好。

标签: javascript mongodb cypress cypress-testing-library


【解决方案1】:

假设您使用 docker 并从运行第一个规范文件之前的位置开始:

  1. 创建一个数据库转储,您将使用它来将数据库恢复到所需的状态
docker exec -i <container_name> /usr/bin/mongodump --username <username> --password <password> --authenticationDatabase admin --db <database_name> --out /dump
  1. 将转储文件复制到 mongodb 容器,并在每个规范文件之后,重置数据库并使用转储文件进行恢复。
docker exec -i <container_name> /usr/bin/mongorestore --username <username> --password <password> --authenticationDatabase admin --db <database_name> /dump/<database_name>

在此处使用 docker 容器进行转储/恢复的完整指南:https://davejansen.com/how-to-dump-restore-a-mongodb-database-from-a-docker-container/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多