如何在TestCafe中的测试的测试文件之间共享全局变量?

问题描述 投票:2回答:1

我正在出于登录目的手动设置身份验证Cookie,我希望在所有测试中共享身份验证令牌。第一次,我必须在测试中执行登录,然后必须将auth令牌保存在变量中,并在测试文件之间共享它。

这里是代码段,用以说明我想做什么以及如何做:

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(不为null),如果我必须在所有文件的所有测试中共享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:以防万一,人们想知道为什么我要设置cookie而不使用useRole。只是为了让您知道useRole在我的设置中不起作用,因为该应用程序在本地环境中手动设置了cookie,因此我必须手动将cookie设置为登录解决方法。

javascript testing automated-tests e2e-testing testcafe
1个回答
2
投票

请参考Extract Reusable Test Code收据以找到有关如何在测试用例之间共享测试代码的信息。

此外,如果仅在特定灯具的测试之间共享对象,则可以使用灯具上下文对象:Sharing Variables Between Fixture Hooks and Test Code。>

例如:

helper.js

var authToken = 111;

function setToken(x) {
    authToken = x;
}

function getToken(x) {
    return authToken;
}

export { setToken, getToken };

test.js

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

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

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

test1.js

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

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

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

另请参见:

import

export

© www.soinside.com 2019 - 2024. All rights reserved.