Как изменить свойство записи в db с помощью cypress.io - PullRequest
0 голосов
/ 29 января 2019

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

Ответы [ 2 ]

0 голосов
/ 30 января 2019

В отличие от @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 );
        }
    });
});
0 голосов
/ 29 января 2019

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

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

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: []
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...