如何使用 cypress.io 更改数据库中记录的属性

use*_*481 4 database node.js cypress

我是 cypress 的新手,我想知道如何进行以下检查:我有一个案例:我在数据库中有一个产品,可以有状态:InStock、OutOfStock 和 Discontinued。如果产品处于“InStock”状态,我应该能够将其发送给客户,如果处于“OutOfStock”/“Discontinued”状态,我应该无法发送给客户。通过 API 调用,我可以将产品发送给客户。如果产品处于“InStock”状态,则 API 响应为 200,否则响应为 statusCode 400。所以我的问题是:如何为每个测试更改数据库中产品的状态,以便我可以检查3 种状态中的每一种(如果 API 返回正确的响应)?我知道如何检查 API 响应本身,但我不清楚如何更改数据库中产品的状态,

dwe*_*lle 8

不像@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)