Как изменить свойство записи в db с помощью cypress.io

Я новичок в Cypress, и мне интересно, как я могу сделать следующие проверки: У меня есть дело: У меня есть продукт в БД, который может иметь статусы: InStock и OutOfStock и Discontinued. Если продукт находится в состоянии "InStock", я должен иметь возможность отправить его клиенту, если в "OutOfStock" / "Discontinued" я не смогу отправить его клиенту. С помощью API я могу отправить продукт клиенту. Если продукт находится в состоянии "InStock", ответ API равен 200, если нет ответа с помощью statusCode 400. Поэтому мой вопрос: как я могу изменить статус продукта в БД для каждого теста, чтобы я мог проверить каждый из 3 статусов (если API возвращает правильный ответ)? Я знаю, как проверить сам ответ API, но мне не ясно, как менять статус продукта в БД перед каждым тестом.

2 ответа

Решение

В отличие от @Maccurt, я бы сделал это так, как вы предлагаете (измените базу данных), чтобы вы могли правильно протестировать поток 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
    });
});

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 );
        }
    });
});

Вы хотите издеваться над своим вызовом API, чтобы он отвечал тем, что вы хотите. Кипарис называет это заглушкой. Это позволит вам перехватить вызов Rest и заменить его на то, что вы хотите. Вы также можете вызвать API для сброса вашей БД, но я бы не советовал.

https://docs.cypress.io/guides/guides/network-requests.html

cy.server()           // enable response stubbing
cy.route({
  method: 'GET',      // Route all GET requests
  url: '/users/*',    // that have a URL that matches '/users/*'
  response: []        // and force the response to be: []
})
Другие вопросы по тегам