BeforeAll vs. BeforeEach.Когда их использовать? - PullRequest
0 голосов
/ 04 февраля 2019

Недавно я просматривал код коллег и понял, что он реализует функцию jest в функции BeforeAll в начале вызова description, а затем создает объект данных в функции beforeEach.Это заставило меня задуматься, в чем именно заключаются различия между BeforeAll и BeforeEach.

Это было время ... Я пошел в Google !!Я нашел некоторые статьи, которые помогли пролить некоторый свет на некоторые функциональные различия между ними.

Выводы 1 : http://breazeal.com/blog/jasmineBefore.html

Выводы 2 : Разница между @Before, @BeforeClass, @BeforeEach и @ 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, а макеты внутри BeforeAll.

Моя путаница заключается в том, что кажется, что весь код можно поместить только в BeforeAll, за некоторыми исключениями.

1 Ответ

0 голосов
/ 04 февраля 2019

Оба используются для установки любых условий, необходимых для одного или нескольких тестов.

Если вы уверены, что тесты не вносят никаких изменений в эти условия, вы можете использовать beforeAll (который будет запущен один раз).

Если тесты do вносят изменения в эти условия, то вам нужно будет использовать beforeEach, который будет выполняться перед каждым тестом, чтобы он мог сброситьусловия для следующего.

Если инициализация не является медленной или требует больших вычислительных ресурсов, может быть безопаснее использовать по умолчанию beforeEach, поскольку это уменьшает вероятность человеческой ошибки, то есть не осознавая, что один тест изменяетнастройка для следующего.

Пример, который вы показали, является хорошим примером использования обоих в комбинации - медленный сетевой вызов помещается в beforeAll, так что это должно произойти только один раз;и объект данных (который предположительно изменяется тестами) сбрасывается каждый раз в beforeEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...