【发布时间】:2019-06-28 05:54:31
【问题描述】:
我最近在查看一个同事的代码,我意识到他在 describe 调用顶部的 BeforeAll 函数中实现了一个 jest 函数,然后在 beforeEach 函数中创建了一个数据对象。这让我想知道,BeforeAll 和 BeforeEach 之间到底有什么区别。
是时候...我去了谷歌!我确实找到了一些文章,有助于阐明两者之间的一些功能差异。
发现 1:http://breazeal.com/blog/jasmineBefore.html
发现 2:Difference between @Before, @BeforeClass, @BeforeEach and @BeforeAll
鉴于我发现 BeforeAll 被调用一次且仅一次的文章。而在每个单独的测试之前调用 BeforeEach。太棒了!我现在对何时调用它有了更好的了解!
我还发现 BeforeAll 最适合用于初始化代码。这很有意义!初始化一次。砰,你已经完成了。
我的困惑是什么时候初始化什么时候不初始化?我发现我们的代码中经常使用 BeforeEach。我很好奇的是,什么样的代码被认为是“初始化”代码,而不是 BeforeEach 中应该包含的任何代码。
以下代码中的一个示例:
beforeAll((done) => {
// Mocking method from within Box file
transferBoxPlanSpy = jest.spyOn(Box, 'transferPlanFromBox').mockImplementation(() => Promise.resolve());
// Pulling data from MongoDB
User.findOne({ user_name: 'testsurgeon1' }, (err, user) => {
user.addMGSPermission();
user.save(done);
});
});
beforeEach(() => {
planData2 = {
user_name: 'hello1',
laterality: 'right',
plan_id: 'testplan42',
order_number: '856-hd-02-l',
file_id: '123456sbyuidbefui',
};
});
我希望我的问题不是太含糊。感谢您的宝贵时间!
编辑 1 我想指出,这段代码不是我自己编写的,而是我们软件团队的一位成员编写的。他将对象放在 BeforeEach 中,将 mock 放在 BeforeAll 中。
我的困惑是,似乎所有代码都可以放在 BeforeAll 中,除了少数例外。
【问题讨论】:
标签: javascript unit-testing testing jestjs