Как разделить глобальную переменную между тестовыми файлами из теста в TestCafe? - PullRequest
2 голосов
/ 13 января 2020

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

Вот фрагмент кода, объясняющий, что и как пытаюсь сделать:

loginTest. js:

let authToken = null;

fixture`Login test`
  .page(inputData.url)
  .beforeEach(async (t) => {
    const nextMonth = new Date();
    nextMonth.setMonth(nextMonth.getMonth() + 1);
    await t.navigateTo(inputData.url).then(await setCookie('AUTH_COOKIE_ID', authToken, nextMonth));
  });

test
  .before(async () => {
    await loginPage.login(inputData.firstUserEmailId, inputData.firstUserPassword);
    authToken = await getCookie('AUTH_COOKIE_ID');
  })('Verify login test', async (t) => {
    await loginPage.goToPeople(personName);
    await t
      .expect(loginPage.personName.exists)
      .ok();
  });

Теперь, после теста, у меня есть фактический authToken (не ноль) и если мне нужно совместно использовать переменную authToken во всех моих тестах во всех моих файлах, то как мне это сделать? с этим дизайном кода я могу поделиться authToken в том же файле (набор тестов). например:

У меня есть файл peopleTest. js:

fixture`People test`
  .page(inputData.url)
  .beforeEach(async (t) => {
    const nextMonth = new Date();
    nextMonth.setMonth(nextMonth.getMonth() + 1);
    await t.navigateTo(inputData.url).then(await setCookie('AUTH_COOKIE_ID', loginTest.authToken, nextMonth));
  });

test('Verify people test', async (t) => {
    await loginPage.goToPeople(personName);
    await t
      .expect(loginPage.personName.exists)
      .ok();
  });

В приведенном выше тесте, если я могу сделать loginTest.authToken это было бы здорово.

PS: В случае, если люди задаются вопросом, почему я делаю настройку cook ie вместо использования useRole. Просто чтобы вы знали, что useRole не работал в моей настройке, так как приложение вручную устанавливает cook ie в моем локальном окружении, поэтому мне нужно вручную установить cook ie в качестве обходного пути входа в систему.

1 Ответ

2 голосов
/ 14 января 2020

См. Квитанцию ​​ Извлечение многоразового тестового кода , чтобы найти информацию о том, как вы можете поделиться своим тестовым кодом между тестами.

Кроме того, вы можете использовать объект контекста прибора, если вы хотите поделиться своим объектом только между тестами конкретного прибора: Совместное использование переменных между крючками приборов и тестовым кодом .

Например:

помощник. js

var authToken = 111;

function setToken(x) {
    authToken = x;
}

function getToken(x) {
    return authToken;
}

export { setToken, getToken };

тест. js

import { getToken, setToken } from './helper.js'

fixture("test1")
        .page("http://localhost");

test('test1', async t => {
    console.log('token: ' + getToken());
    setToken(111);
});

тест1. js

import { getToken } from './helper.js'

fixture("test2")
        .page("http://localhost");

test('test2', async t => {
    console.log('token2: ' + getToken());
});

См. Также:

импорт

экспорт

...