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 以啥顺序执行?的主要内容,如果未能解决你的问题,请参考以下文章