Область TestCafe Ожидается () - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в TestCafe и изо всех сил стараюсь выполнить тест «чистым способом», используя роли. Я читал документы из TestCafe и был вдохновлен этим "учебником" https://github.com/qualityshepherd/testcafe-example для создания моих тестов.

Я должен написать тест, который проверяет, правильно ли пользователь вошел в систему. Для этого я хочу использовать роли. Это архитектура моих тестовых сценариев, и я объясню, почему я делаю этот выбор:

  • data
    • ролей. js именно здесь я определил роли
  • страниц (папка)
    • base-page. js оболочка всех страниц (где у меня есть контент, такой как панель инструментов / навигационная панель /. ..
    • страница входа. js моя страница входа
    • страница статуса. js страница после успешного входа
  • тесты
    • login.test. js тест, который не работает так, как я хочу

Давайте углубимся в некоторые фрагменты кода. Это мой login.test. js file:

import basePage from '../../pages/base-page';

fixture `Account management`;

test('Login with valid account',
    async (t) => {
        await t
            .useRole(validUser) // this logs me in using a Role defined in another file
            .expect(basePage.userSection.exists).ok() // check if exists
            .expect(basePage.userSection.child(1).textContent).eql('somevalid.username'); // check if value is the one I expect
    }
);

// other tests...

Роли . js файл:

import { Role } from 'testcafe';
import loginPage from '../pages/login-page.js';

// I will obviously not display any valid data on this post
export const validUser = Role(
    loginPageUrl,
    async (t) => {
        await loginPage.login(t, someValidEmail, someValidPassword);
    },
    { preserveUrl: true }
);

Моя базовая страница. js файл:

// imports 

const baseUrl = 'http://localhost:3000/';

const basePage = {
    baseUrl,
    userSection: $('div.navigation-account-dropdown.js-user-menu'), // some section on my navbar
    [... other stuff you don't need to know about]
}

export default basePage;

Моя страница входа . js file:

import { Selector as $, t } from 'testcafe';
import basePage from './base-page';

// FIXME: I do not want to use .expect(...) here but in the proper test file (login.test.js)
const loginPage = {
    url: `${basePage.baseUrl}signin`,
    usernameInput: $('#at-field-email'),
    passwordInput: $('#at-field-password'),
    loginBtn: $('#at-pwd-form').find('button'),

    async login(t, username, password) {
        await t
            .typeText(this.usernameInput, username)
            .typeText(this.passwordInput, password)
            .click(this.loginBtn) // I want to stop the logic here and do the assertion on the proper test.js file
            .expect(basePage.userSection.exists).ok(); // I do not want to do assertions here but I have to do it otherwise tests fails
    }
}

export default {
    ...basePage,
    ...loginPage
};

Проблема в том, что когда я комментирую строку .expect(basePage.userSection.exists).ok(); на странице входа . js file, тест не проверяется т ру п как и ожидалось. Он заполняет форму, нажимает кнопку «Отправить», и тогда ничего не происходит (я все еще на странице входа, он перезагружается). Поэтому я добавил одно утверждение, чтобы оно работало. Но я не хочу никаких утверждений здесь, это должно быть не здесь, а в самом тестовом файле. Мой главный вопрос: как я могу удалить любое утверждение из файла login-page. js. Почему я должен сделать это .expect там, чтобы пройти тест?

Есть ли у вас какие-либо советы / советы относительно того, как структурировать тест проекта (мне нужно написать много тестов, поэтому я пытаюсь разделить некоторые логики)?

1 Ответ

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

Поведение, которое вы описали, неожиданно. В качестве возможного решения используйте опцию preserveUrl: https://devexpress.github.io/testcafe/documentation/test-api/authentication/user-roles.html#optionspreserveurl.

Если это не поможет, нам нужно детально изучить проблему. Пожалуйста, поделитесь своим примером и создайте отдельную проблему в репозитории TestCafe github, используя следующую форму: https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md.

Если вы не можете поделиться своим проектом здесь, вы можете отправить его на support@devexpress.com.

Обратите внимание, что наша политика запрещает нам доступ к внутренним ресурсам без предварительного письменного согласия владельца сайта. Если вы хотите, чтобы мы продолжили изучение проблемы непосредственно на вашей стороне, попросите владельца веб-сайта отправить нам (support@devexpress.com) письменное подтверждение. Он должен позволять персоналу Dev Express получать удаленный доступ к веб-сайту и его внутренним ресурсам в целях исследования / тестирования / и отладки.

...