如何在测试中使用在 beforeAll() 钩子中分配了值的变量

Posted

技术标签:

【中文标题】如何在测试中使用在 beforeAll() 钩子中分配了值的变量【英文标题】:How to use variables in tests that were assigned with values at beforeAll() hook 【发布时间】:2021-08-14 22:04:56 【问题描述】:

我想在beforeAll() 钩子上分配一组具有值的变量,然后在test.each([]) 中使用它们,但我得到的只是未定义而不是实际值。

但是当我尝试在普通test() 中访问相同的变量时,事实证明,我的变量具有实际值并且不是未定义的。

有没有办法给变量赋值,然后在test.each([])中使用?

let movieId: string;
let serialId: string;

describe('Video page tests', () => 

  beforeAll(async () => 
    movieId = await videos.CreateMovie();
    serialId = await videos.CreateSerial();
  );

test.each([
    ['Deletes movie', movieId],
    ['Deletes serial', serialId],
  ])('%s', async(caseTitle, entityId) => 
    reporter.description(`$caseTitle`);

    await videos.DeleteContent(entityId); //entityId is undefined
  )

test('Deletes movie', async() => 
    reporter.description(`Deletes movie`);

    await videos.DeleteContent(movieId); //movieId is correct
  )

【问题讨论】:

你不能。 beforeAll 仍然在测试 execution 时间运行,而不是测试 discovery 时间(在评估 test.each 时)。这就是为什么 ID 在测试中是正确的,它在 beforeAll. 之后运行 【参考方案1】:

事实证明,我不能在 test.each 使用变量,在 beforeAll 钩子上分配的变量,所以我想出了一个解决我的问题的方法

let content: string[] = [];
describe('Video page tests', () => 

  beforeAll(async () => 
    content.push(await videos.CreateMovie());
    content.push(await videos.CreateSerial());
  );

test.each([
    ['Deletes movie', 0],
    ['Deletes serial', 1],
  ])('%s', async(caseTitle, entityId) => 
    reporter.description(`$caseTitle`);

    await videos.DeleteContent(content[entityId]);
  )

【讨论】:

以上是关于如何在测试中使用在 beforeAll() 钩子中分配了值的变量的主要内容,如果未能解决你的问题,请参考以下文章

测试用例在完成 beforeAll 之前执行。?

@BeforeAll 在 JUnit5 中没有按预期运行

在beforeAll中创建一次TestBed之后,无法在beforeEach中重置提供程序

如何在 Swift Quick Nimble 中执行 beforeAll

beforeEach 和 beforeAll 以啥顺序执行?

带有 Jest 的打字稿 - “ReferenceError:未定义 beforeAll”