use*_*481 4 database node.js cypress
我是 cypress 的新手,我想知道如何进行以下检查:我有一个案例:我在数据库中有一个产品,可以有状态:InStock、OutOfStock 和 Discontinued。如果产品处于“InStock”状态,我应该能够将其发送给客户,如果处于“OutOfStock”/“Discontinued”状态,我应该无法发送给客户。通过 API 调用,我可以将产品发送给客户。如果产品处于“InStock”状态,则 API 响应为 200,否则响应为 statusCode 400。所以我的问题是:如何为每个测试更改数据库中产品的状态,以便我可以检查3 种状态中的每一种(如果 API 返回正确的响应)?我知道如何检查 API 响应本身,但我不清楚如何更改数据库中产品的状态,
不像@Maccurt,我会真正做到这一点,你提出的方式(改变DB),这样你就可以正确地测试E2E流。
而不是设置将写入数据库的测试路由,您可以使用 cy.task它与 Cypress Runner 的节点进程对话,后者可以直接写入数据库。它看起来像这样:
在本例中使用 postgres ( node-postgres )。
your-test.spec.js
describe("test", () => {
it("test", () => {
cy.task("query", {
sql: `
UPDATE product
SET status = $1
WHERE id = $2
`,
values: [ "InStock", 40 ]
});
// your cy assertions here
});
});
Run Code Online (Sandbox Code Playgroud)
cypress/plugins/index.js
const pg = require("pg");
const pool = /* initialize your database connection */;
module.exports = (on) => {
on("task", {
query ({ sql, values }) {
return pool.query(sql, values);
}
});
});
Run Code Online (Sandbox Code Playgroud)