【发布时间】:2021-11-05 18:10:58
【问题描述】:
我刚刚在 cypress 上创建了一个测试文件(MERN 堆栈),运行测试后,我想从我的 Mongoose 数据库中删除它。有什么方法可以在测试成功运行后立即删除该数据?我不想手动操作。
【问题讨论】:
-
您可以利用
after或afterEach挂钩向 MongoDB 发送删除请求以删除数据
我刚刚在 cypress 上创建了一个测试文件(MERN 堆栈),运行测试后,我想从我的 Mongoose 数据库中删除它。有什么方法可以在测试成功运行后立即删除该数据?我不想手动操作。
【问题讨论】:
after 或 afterEach 挂钩向 MongoDB 发送删除请求以删除数据
我使用的一种方法是使用所有清理脚本创建一个单独的规范文件(例如.cleanup.spec.js),并确保该文件在测试结束时运行。为了确保这一点,您可以使用cypress.json 中的testFiles 选项。它的作用是按您提到的顺序加载测试。
"testFiles": [
"Some Test 1.spec.js",
"Some Test 2.spec.js",
"Some Test 3.spec.js",
"cleanup.spec.js"
]
使用afterEach() 删除测试数据在过去对我来说总是造成问题,原因如@Mihi 所述
Cypress 建议不要使用after() 或afterEach() 进行清理,而是使用before() 或beforeEach() 在播种或测试之前清理数据库。
原因是,如果发生崩溃或程序化测试重试,after* 挂钩可能不会运行。
这样做before* 意味着测试总是看到正确的数据库状态。
【讨论】:
根据您的需要,您可以执行以下操作之一:
afterEach删除记录
describe('Example', () => {
afterEach(() => {
// delete the record
})
// Include tests here
})
after:run 挂钩:https://docs.cypress.io/api/plugins/after-run-api
【讨论】: