当前位置: 首页 > 知识库问答 >
问题:

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

洪飞驰
2023-03-14

我手动设置认证cookie为我的登录目的,我想在我的测试中共享认证令牌。第一次我必须在测试中执行登录,然后我必须将授权令牌保存在变量中,并在测试文件中共享它。

下面是一段代码片段,解释我正在尝试做什么以及如何做:

登录est.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。例如:

我有一个文件,人们est.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作为登录变通方法。

共有1个答案

凤高澹
2023-03-14

请参阅提取可重用测试代码收据,了解如何在测试用例之间共享测试代码。

此外,如果您想仅在特定夹具的测试之间共享对象,您可以使用夹具上下文对象:在夹具钩子和测试代码之间共享变量

例如:

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());
});

另见:

导入

出口

 类似资料:
  • 问题内容: 我知道可以在Python中的各个模块之间共享全局变量。但是,我想知道这种可能性的程度以及原因。例如, global_mod.py mid_access_mod.py bot_modif_mod.py 即使所有模块都共享全局变量x,也将打印“无”。为什么会这样呢?似乎x是在mew()分配给bot_modif_mod.py之前在mid_access_mod.py求值的。 问题答案: 发生这

  • 问题内容: 我只想在进程与该进程调用的dll之间共享静态/全局变量。exe和dll在相同的内存地址空间中。我不希望在其他进程之间共享该变量。 问题的阐述: 说是有一个静态/全局变量在。exe 和dll 都具有,因此变量都在两个图像中。 现在,动态加载(或静态)。然后,问题是该变量是否由exe和dll共享。 在Windows中,这两个家伙 永远不会 共享:exe和dll将具有的单独副本。但是,在Li

  • 问题内容: 在我的应用中,公共对象的状态通过发出请求来更改,而响应取决于状态。 如果我在开发服务器上运行此程序,则期望得到1、2、3等。如果同时从100个不同的客户发出请求,会出问题吗?预期结果将是100个不同的客户端各自看到一个从1到100的唯一数字。或者会发生以下情况: 客户端1查询。增加1。 在执行return语句之前,线程将切换到客户端2。再次递增。 线程切换回客户端1,并向客户端返回数字

  • 问题内容: 在我的应用中,公共对象的状态通过发出请求来更改,而响应取决于状态。 如果我在开发服务器上运行此程序,则期望得到1、2、3等。如果同时从100个不同的客户发出请求,会出问题吗?预期结果将是100个不同的客户端各自看到一个从1到100的唯一数字。或者会发生以下情况: 客户端1查询。增加1。 在执行return语句之前,线程将切换到客户端2。再次递增。 线程切换回客户端1,并向客户端返回数字

  • 问题内容: 我对全局变量的工作方式感到困惑。我有一个大型项目,大约有50个文件,并且需要为所有这些文件定义全局变量。 我所做的就是在我的项目main.py文件中定义它们,如下所示: 我尝试过的另一种方法,但也没有用 在subfile.py我里面有这个: 但是同样,它没有用。我应该如何实施呢?我知道当两个文件彼此之间并不真正了解时(子文件不知道主文件),它就不能那样工作,但是如果不使用io编写或pi

  • 问题内容: 假设我想将此变量设为一个常量,以便在Angularjs中的控制器之间共享; 经过一番调查,看来服务是可行的方法。但是最好的方法是什么?我使用工厂,服务,价值还是其他? 下面是来自angularjs-master-seed的services.js; 如何修改它以使其具有在控制器之间可共享的常量$ webroot? 我可以做以下事情吗? 如果可以,如何在控制器中调用它? 问题答案: 如果变