Как использовать если еще с транспортиром - PullRequest
0 голосов
/ 08 апреля 2020

У меня очень странный сценарий ios, и я не уверен, как с ним справиться.

Я новичок в тестировании, и у меня есть сайт, чтобы проверить, где мы проверяем функцию корзины, если она работает.

Моя проблема в том, что мы добавляем х номеров продукта и делаем проверку на складе. Если есть конфликт запасов, то нам нужно решить его, прежде чем продолжить, иначе мы просто продолжим.

Мне удалось создать функцию, которая выглядит следующим образом:

describe("Details page", function () {

    detailsPage = new DetailsPage();

    // The details page is accessible by the specified URL
    it(`Is defined by the URL: ${userData["url"]}${browser.baseUrl}`,
        async function () {
            await detailsPage.navigateDesktop();
        });

    // Details page has a form and it can be filled out with user data
    it("Has a form that can receive user data",
        async function() {
            await detailsPage.fillFormWithUserData();
            await utils.click(detailsPage.getForm().buttons.nextStep);
        });

    if (detailsPage.hasStockConflict()) {

        // Details page allows the user to fix conflicts in stocks
        it('Enables resolution of stock conflicts', async function () {
            // Wait for stock to fully load
            await detailsPage.hasStockConflict();
            await detailsPage.clickAllRemoveButtons();
            await detailsPage.clickAllDecreaseButtons();
        });

        // Details page allows the user to proceed to the next stage when all conflicts (if any) has been resolved
        it('Allows the user to proceed to the next stage of purchasing', async function () {
            const nextStepButton = detailsPage.getForm().buttons.nextStep;
            await utils.elementToBeClickable(nextStepButton);
            await utils.click(nextStepButton);
        });
    }
});

, однако моя проблема с функцией заключается в том, что Мне нужно подождать, пока я не получу ответ от сервера, либо я получу конфликт акций, который будет вызван:

hasStockConflict() //checks if there is stockConflict message in DOM

, либо я получу перенаправление на новую страницу.

У меня вопрос: как я могу сделать функциональную сортировку, которая проверяет наличие конфликта запасов, тогда мы решаем оператор if, иначе мы просто продолжаем без необходимости что-либо делать (что приведет меня на следующую страницу)?

Я установил тайм-аут на 1 минуту. Через 1 минуту тест пройдёт как неудачный.

По сути, я хочу решить оператор if, если есть конфликт акций, иначе мы просто пропустим его. Возможно, я неправильно понял цель тестирования, поэтому все виды знаний также будут оценены!

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Чтобы добавить к тому, что упомянул Code-Apprentice, вы можете настроить фиктивные данные, чтобы получить ответ по своему усмотрению. У вас должны быть смоделированные разные ответы, и в зависимости от ответа сделайте одну конкретную c вещь в одном тесте. Нет, если что-то еще будет в шагах.
В вашем случае, на данный момент, используйте предметы, которые, как вы знаете, есть в наличии, или добавьте пустышки, которые всегда есть в наличии, и добавьте пустышки в вашу базу данных, которых нет в наличии. Напишите отдельные тесты для обоих и как вы считаете нужным.

Надеюсь, это поможет!

2 голосов
/ 08 апреля 2020

Каждый тест должен проверяться на конкретную c вещь. Они не должны содержать if...else ветвления. Вместо этого у вас должен быть тест для каждого сценария. Каждый тест должен требовать инициализированных данных, которые удовлетворяют этому заданному сценарию c.

У вас есть два различных подхода к этому:

  1. Настройка данных в ресурсе, который вы запрашиваете и запросить данные c для тестируемого сценария.

  2. Выполнить макет ресурса, чтобы запросы возвращали фиктивные данные, которые курируются для тестируемого сценария.

0 голосов
/ 08 апреля 2020

То, что все говорили, это то, что есть лучшие практики, которым нужно следовать, чтобы избежать ошибок в будущем ...

Однако, лучшая практика # 1 - , это всегда зависит на вашу компанию, ваш продукт, ваши потребности. Поэтому, если вы решите, что вам нужен go этот маршрут, go для него

Почему ваш сценарий не работает

Краткий ответ, ваши блоки it создаются перед браузером начал. В то время ваша функция не может работать, и я предполагаю, что она не работает или возвращает undefined

Ответ

С учетом сказанного ^ вы не можете пропустить it, просто разместите логи c внутри вот так

        it('Enables resolution of stock conflicts', async function () {
          if (detailsPage.hasStockConflict()) {
            // Wait for stock to fully load
            await detailsPage.hasStockConflict();
            await detailsPage.clickAllRemoveButtons();
            await detailsPage.clickAllDecreaseButtons();

            const nextStepButton = detailsPage.getForm().buttons.nextStep;
            await utils.elementToBeClickable(nextStepButton);
            await utils.click(nextStepButton);
          }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...