在Jest中使用beforeEach函数的好处是什么

时间:2019-04-02 10:28:42

标签: javascript vue.js jestjs

我正在与此manual学习Jest。在Jest中使用beforeEach函数有什么好处?

我想检测动作调度。我认为以下两个代码将具有相同的行为。

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 个答案:

答案 0 :(得分:1)

没有这些示例没有相同的行为。您可以在Jest(https://jestjs.io/docs/en/setup-teardown)的文档中找到,beforeEach方法是在每种测试方法之前执行的。

因此,在第一个示例中,您只创建了actionstore一次,并且在第二种测试期间仍然可以使用在第一种测试方法(increment)中所做的更改。在第二个示例中,为每个测试重新创建actionstore。因此,第一种测试方法所做的更改在第二种测试方法中不可用。

在大多数情况下,首选第二种方法,因为没有共享状态的独立测试是一种好习惯。

答案 1 :(得分:0)

正如已经提到的,beforeEach在每次测试之前被称为

使用beforeAllbeforeEach的另一个重要优点是,您可以将返回Promise的函数或返回async的函数和{{1} }将等待生成的Jest解析后再继续。

因此PromisebeforeAll 必须用于任何异步设置工作:

beforeEach