beforeEach 和 beforeAll 以啥顺序执行?

Posted

技术标签:

【中文标题】beforeEach 和 beforeAll 以啥顺序执行?【英文标题】:In what order does beforeEach and beforeAll execute?beforeEach 和 beforeAll 以什么顺序执行? 【发布时间】:2019-07-29 08:35:58 【问题描述】:

我正在使用 Jest-Puppeteer 对 Rails 应用程序进行端到端测试。在这些测试之前,我想运行一些种子并进行 DRY 工作,我告诉服务器在每次测试之前转到某个 URL。

// imports

describe("user can", () => 
  // here are some constants

  let page;

  beforeAll(async () => 
    await executeSeed(const1);
    await executeSeed(const2);
    await executeSeed(const3);

    page = await newPrivatePage();
    await login(page);
  );

  beforeEach(async () => 
    await page.goto(baseUrl("/some-route"));
  );

  describe("view some great files", () => 

);

我希望首先执行种子,因为这是 beforeAll 并且如果第一个测试完成 beforeEach 将再次执行,但我在 jest 的文档中找不到它 (https://jestjs.io/docs/en/api#beforeallfn-timeout)

【问题讨论】:

【参考方案1】:

您可以在 Jest 文档上阅读这篇文章 https://jestjs.io/docs/en/setup-teardown.html

beforeAll(() => console.log('1 - beforeAll'));
afterAll(() => console.log('1 - afterAll'));
beforeEach(() => console.log('1 - beforeEach'));
afterEach(() => console.log('1 - afterEach'));
test('', () => console.log('1 - test'));
describe('Scoped / Nested block', () => 
  beforeAll(() => console.log('2 - beforeAll'));
  afterAll(() => console.log('2 - afterAll'));
  beforeEach(() => console.log('2 - beforeEach'));
  afterEach(() => console.log('2 - afterEach'));
  test('', () => console.log('2 - test'));
);

// 1 - beforeAll
// 1 - beforeEach
// 1 - test
// 1 - afterEach
// 2 - beforeAll
// 1 - beforeEach
// 2 - beforeEach
// 2 - test
// 2 - afterEach
// 1 - afterEach
// 2 - afterAll
// 1 - afterAll

如您所见,beforeAll 将在您的所有测试执行之前运行。 beforeEach 将在你们每个人测试之前运行。所以beforeAll会在beforeEach之前运行

【讨论】:

请注意,嵌套describe 中的作用域beforeAll 将在父beforeEach 之前运行。因此,如果您在作用域 beforeAll 中依赖父级 beforeEach 中的某些内容,它还不会运行。 如果您正在寻找 Jasmine 并且 Google 将您发送到此处,请将使用它的两个地方的 test 更改为 it,您会得到一个非常有用但略有不同的答案。 1 - beforeAll, 2 - beforeAll, 1 - beforeEach, 2 - beforeEach, 2 - test, 2 - afterEach, 1 - afterEach, 2 - afterAll, 1 - beforeEach, 1 - test, 1 - afterEach, @ruffin 你能把它放在答案而不是评论中吗?我认为这很相关

以上是关于beforeEach 和 beforeAll 以啥顺序执行?的主要内容,如果未能解决你的问题,请参考以下文章

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

SpringBoot中的测试(test)

junit5常用注解

Junit 5 单元测试框架

SpringBoot——单元测试之JUnit5

SpringBoot——单元测试之JUnit5