gpt4 book ai didi

javascript - BeforeAll 与 BeforeEach。什么时候使用它们?

转载 作者:行者123 更新时间:2023-11-28 20:18:39 30 4
gpt4 key购买 nike

我最近查看了一位同事的代码,我意识到他在 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 中。

我感到困惑的是,除了少数异常(exception),似乎所有代码都可以放入 BeforeAll 中。

最佳答案

两者都用于设置一项或多项测试所需的任何条件。

如果您确定测试不会对这些条件进行任何更改,则可以使用 beforeAll(将运行一次)。

如果测试确实对这些条件进行了更改,那么您将需要使用beforeEach,它会在每次测试之前运行,因此它可以为下一个。

除非初始化很慢或计算量大,否则默认使用 beforeEach 可能是最安全的,因为它减少了人为错误的机会,即没有意识到一个测试正在改变下一个测试的设置一。 (异步网络调用是一种常见的——当然不是唯一的——用于“缓慢”初始化的用例,其中 beforeAll 是合适的。)

您展示的示例是结合使用两者的一个很好的例子——慢速网络调用放在 beforeAll 中,所以它只需要发生一次;并且每次在 beforeEach 中重置数据对象(可能已被测试修改)。

关于javascript - BeforeAll 与 BeforeEach。什么时候使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54517032/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com