В чем преимущество использования функции beforeEach в Jest? - PullRequest
0 голосов
/ 02 апреля 2019

Я изучаю Jest с этим руководством .В чем преимущество использования функции beforeEach в Jest?

Я хочу обнаружить диспетчеризацию действий.Я думаю, что два из следующих кодов будут иметь одинаковое поведение.

describe('dispatch actions', () => {
  const localVue = createLocalVue()
  localVue.use(Vuex)

  let actions = { increment: jest.fn(), decrement: jest.fn() }
  let store = new Vuex.Store({ state: {}, actions })

  const wrapper = shallowMount(Counter, { store, localVue })

  it('dispatches "increment" when plus button is pressed', () => {
    wrapper.find('button#plus-btn').trigger('click')
    expect(actions.increment).toHaveBeenCalled()
  })

  it('dispatches "decrement" when minus button is pressed', () => {
    wrapper.find('button#minus-btn').trigger('click')
    expect(actions.decrement).toHaveBeenCalled()
  })
})

describe('dispatch actions', () => {
  const localVue = createLocalVue()
  localVue.use(Vuex)

  let actions
  let store

  beforeEach(() => {
    actions = {
      increment: jest.fn(),
      decrement: jest.fn()
    }
    store = new Vuex.Store({
      state: {},
      actions
    })
  })

  it('dispatches "increment" when plus button is pressed', () => {
    const wrapper = shallowMount(Counter, { store, localVue })
    wrapper.find('button#plus-btn').trigger('click')
    expect(actions.increment).toHaveBeenCalled()
  })

  it('dispatches "decrement" when minus button is pressed', () => {
    const wrapper = shallowMount(Counter, { store, localVue })
    wrapper.find('button#minus-btn').trigger('click')
    expect(actions.decrement).toHaveBeenCalled()
  })
})

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Нет, эти примеры не имеют одинакового поведения. Как вы можете найти в документации Jest (https://jestjs.io/docs/en/setup-teardown), метод beforeEach выполняется перед каждым методом тестирования.

Итак, в первом примере вы создаете action и store только один раз, а изменения, сделанные в первом методе тестирования (increment), все еще доступны во время второго теста. Во втором примере action и store воссоздаются для каждого теста. Поэтому изменения, внесенные в первый метод испытаний, недоступны во втором методе испытаний.

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

0 голосов
/ 02 апреля 2019

Как уже упоминалось, beforeEach перед каждым тестом вызывается .

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

Итак beforeAll и beforeEach must использоваться для любых асинхронных работ по настройке:

describe('something', () => {

  let setInBeforeAll, setinBeforeEach;

  beforeAll(() => {
    return returnsAPromise().then(val => {  // <= you can return a Promise...
      setInBeforeAll = val;
    });
  });

  beforeEach(async () => {  // ...or use an async function
    setInBeforeEach = await alsoReturnsAPromise();
  });

  it('should do something', () => {
    // both setInBeforeAll and setInBeforeEach are available here
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...