如何在 TestCafe 中的测试文件之间共享全局变量?
How to share a global variable between test files from a test in TestCafe?
我正在为我的登录目的手动设置身份验证 cookie,我想在我的测试中共享身份验证令牌。第一次我必须在测试中执行登录,然后我必须将身份验证令牌保存在一个变量中并在测试文件中共享它。
这是解释我正在尝试做什么以及如何做的代码片段:
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:以防万一,人们想知道为什么我要设置 cookie 而不是使用 useRole
。只是想让您知道 useRole
在我的设置中不起作用,因为应用程序在我的本地环境中手动设置了 cookie,因此我必须手动将 cookie 设置为登录解决方法。
请参阅 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());
});
另请参阅:
我正在为我的登录目的手动设置身份验证 cookie,我想在我的测试中共享身份验证令牌。第一次我必须在测试中执行登录,然后我必须将身份验证令牌保存在一个变量中并在测试文件中共享它。
这是解释我正在尝试做什么以及如何做的代码片段:
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:以防万一,人们想知道为什么我要设置 cookie 而不是使用 useRole
。只是想让您知道 useRole
在我的设置中不起作用,因为应用程序在我的本地环境中手动设置了 cookie,因此我必须手动将 cookie 设置为登录解决方法。
请参阅 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());
});
另请参阅: