Я только что вошел в мир тестирования с кукловодом и шутками, и мне было интересно, каковы лучшие практики с точки зрения архитектуры папок и логики c.
Я никогда раньше не проводил тестирование, и я мне кажется, я немного теряюсь в различных принципах и концепциях и в том, как все это сочетается.
Я научился проводить свои тесты на основе модели объекта страницы, поэтому у меня есть классы для каждой из моих страниц , но также для каждого из моих модулей (или компонентов). Например, в моем приложении заголовок или модальное имя входа являются компонентами.
Тогда у меня есть тестовый файл для каждой страницы или для каждого компонента. (например, файл landingPage.tests.js
, который использует модель класса LandingPage в файле LandingPage.js
)
Вот конкретный пример: у меня есть разные случаи входа в систему, и я хотел бы проверить их все , Например, я хочу протестировать соединение с «обычным» пользователем, для которого процесс просто логин, а затем пароль. Затем мне нужно провести тестирование с пользователем, который активировал 2FA, или с пользователем из компании, которая использует SSO.
Сначала я подумал о том, чтобы поместить свои разные тесты в authentication.tests.js
, в разные блоки describe
, думая, что каждый раз будет открываться новая вкладка, но это не так ... Я использую кукловода в режиме инкогнито, чтобы убедиться, что каждая вкладка является изолированным сеансом.
Итак, мои вопросы:
Где лучше всего сделать эти наборы тестов?
Должен ли я иметь тестовые файлы, которые "описывают" страницы (например, кнопка должна присутствовать, такой текст должен быть здесь и т. д. c), а также иметь тестовый файл типа сценария (набор контекстных действий для пользователя, например, для разных случаев входа в систему)?
Вот authentication.tests.js
, в котором я хотел бы проверить все мои различные способы входа в систему:
import HeaderComponent from "../../../pages/components/HeaderComponent";
import AuthenticationComponent from "../../../pages/components/AuthenticationComponent";
import LandingPage from "../../../pages/landing/LandingPage";
import {
JEST_TIMEOUT,
CREDENTIALS
} from "../../../config";
describe('Component:Authentication', () => {
let headerComponent;
let authenticationComponent;
let landingPage;
beforeAll(async () => {
jest.setTimeout(JEST_TIMEOUT);
headerComponent = new HeaderComponent;
authenticationComponent = new AuthenticationComponent;
landingPage = new LandingPage;
});
describe('Normal login ', () => {
it('should click on login and open modal', async () => {
await landingPage.visit();
await headerComponent.isVisible();
await headerComponent.clickOnLogin();
await authenticationComponent.isVisible();
});
it('should type a normal user email adress and validate', async () => {
await authenticationComponent.typeUsername(CREDENTIALS.normal.username);
await authenticationComponent.clickNext();
});
it('should type the correct password and validate', async () => {
await authenticationComponent.typePassword(CREDENTIALS.normal.password);
await authenticationComponent.clickNext();
});
it('should be logged in', async () => {
await waitForText(page, 'body', 'Success !');
});
});
describe('SSO login ', () => {
// todo ...
});
});
Спасибо и извините, если это звучит странно, как я сказал, что я пытаясь выяснить, как все это сочетается.