Как выполнить процесс входа в E2E и протестировать больше страниц - PullRequest
0 голосов
/ 25 февраля 2020

Я использую testcafe в приложении Electron-React, пытающемся интегрировать некоторые базовые c e2e tests.

Тест работает, однако он не актуален.

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

App.e2e. js

import { Selector } from 'testcafe';
import { getPageTitle, getPageUrl, fixture, test, login } from './helpers';

const assertNoConsoleErrors = async browser => {
  const { error } = await browser.getBrowserConsoleMessages();
  await browser.expect(error).eql([]);
};

fixture`Electron Client`.page('../../app/app.html').afterEach(assertNoConsoleErrors);

test('should atempt login without credentials', async browser => {
  await login({
    email: 'name@name.com',
    password: '123456',
    browser,
  });
  await browser
    .click('button[type=submit]')
    .expect(getPageUrl())
    .contains('/login');

  const email = Selector('[name="email"]');
  const password = Selector('[name="password"]');

  await browser.expect(email.value).eql('name@name.com');
  await browser.expect(password.value).eql('123456');
});

помощников. js

import { ClientFunction } from 'testcafe';

export const getPageTitle = ClientFunction(() => document.title);

export const fixture = (...args) => global.fixture(...args);

export const test = (...args) => global.test(...args);

export const getPageUrl = ClientFunction(() => window.location.href);

export const login = async ({ email, password, browser }) => {
  await browser.typeText('[data-test="email"]', email);
  await browser.typeText('[data-test="password"]', password);
  await browser.click('button[type=submit]');
};

1 Ответ

3 голосов
/ 26 февраля 2020

Вы можете использовать API пользовательских ролей для удовлетворения ваших требований. См. Пример ниже.

const loginAsTestUser = Role('../../app/app.html', async t => {
   await t
      .typeText('[data-test="email"]', email)
      .typeText('[data-test="password"]', password)
      .click('button[type=submit]');
});

fixture`Electron Client`
    .page('../../app/app.html')
    .beforeEach(async t => {
        await t.useRole(loginAsTestUser);
    });
    .afterEach(assertNoConsoleErrors);

test('should atempt login without credentials', async browser => {

  await browser
    .click('button[type=submit]')
    .expect(getPageUrl())
    .contains('/login');

  const email = Selector('[name="email"]');
  const password = Selector('[name="password"]');

  await browser.expect(email.value).eql('name@name.com');
  await browser.expect(password.value).eql('123456');
});

...