Я новичок в 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 там, чтобы пройти тест?
Есть ли у вас какие-либо советы / советы относительно того, как структурировать тест проекта (мне нужно написать много тестов, поэтому я пытаюсь разделить некоторые логики)?