beforeEach 和 beforeAll 以什么顺序执行?

Jel*_*der 6 testing jestjs

我正在使用 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", () => {

});

Run Code Online (Sandbox Code Playgroud)

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

Tie*_*ong 9

您可以在 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
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,嵌套“describe”中的作用域“beforeAll”将在父“beforeEach”之前运行。因此,如果您依赖于作用域“beforeAll”中父级“beforeEach”中的某些内容,那么它还没有运行。 (7认同)