Совместное использование утверждений внутри методов объекта страницы - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь создать метод в объекте страницы, который выполняет определенный тест, который я буду часто использовать.Я следовал примеру документации , но он предназначен для ввода / нажатия и, возможно, не может работать с expect?

AssertionError: expected undefined to be truthy

Эта ошибка указывает на эту строку в моем тесте:

await t.expect(await page.nameTextInput.isRequired()).ok()

Это вызывает проверку isRequired внутри "TextInputFeature", который я использовал внутри моей объектной модели страницы:

export default class TextInputFeature {
    constructor(model) {
        this.input = AngularJSSelector.byModel(model);
        this.label = this.input.parent().prevSibling('label');
        this.asterisk = this.label.find('.required');
    }

    async isRequired() {
        await t
            .expect(this.input.hasAttribute('required')).ok()
            .expect(this.asterisk.exists).ok();
    }
}

РЕДАКТИРОВАТЬ: Следующее "работает":

await t
      .expect(...)
      .click(...)
      .expect(...)
await page.racTextInput.isRequired();
await t
      .expect(...)

... но моя цель - разрешить цепочку:

await t
      .expect(...)
      .click(...)
      .expect(page.racTextInput.isRequired()).ok()
      .expect(...)

1 Ответ

0 голосов
/ 01 марта 2019

Я нашел несколько ошибок в вашем коде.Пожалуйста, проверь это.1) Метод isRequired ничего не возвращает, и поэтому вы получили undefined.2) Я думаю, вам не нужно заключать метод isRequired в отдельный вызов expect.Этого должно быть достаточно для записи только await page.nameTextInput.isRequired() 3) Вы пропустили параметр t в методе isRequired, однако, я думаю, что это просто опечатка

ОБНОВЛЕНО:

Тестовая страница:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <label>Name
    <div class="required">*</div>
    </label>
    <input required="required" type="text" id="name">
</body>
</html>

Код теста:

import { Selector } from 'testcafe';

class TextInputFeature {
    constructor () {
        this.input    = Selector('input#name');
        this.label    = Selector('label');
        this.asterisk = this.label.find('.required');
    }

    async isRequired () {
        const hasRequiredAttribute = await this.input.hasAttribute('required');
        const asteriskExists       = await this.asterisk.exists;

        return hasRequiredAttribute && asteriskExists;
    }
}

fixture`fixture`
    .page`../pages/index.html`;

test(`test`, async t => {
    const inputFeature = new TextInputFeature();

    await t
        .click(inputFeature.label)
        .expect(await inputFeature.isRequired()).ok()
        .click(inputFeature.label);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...