我正在与此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()
})
})
答案 0 :(得分:1)
没有这些示例没有相同的行为。您可以在Jest(https://jestjs.io/docs/en/setup-teardown)的文档中找到,beforeEach
方法是在每种测试方法之前执行的。
因此,在第一个示例中,您只创建了action
和store
一次,并且在第二种测试期间仍然可以使用在第一种测试方法(increment
)中所做的更改。在第二个示例中,为每个测试重新创建action
和store
。因此,第一种测试方法所做的更改在第二种测试方法中不可用。
在大多数情况下,首选第二种方法,因为没有共享状态的独立测试是一种好习惯。
答案 1 :(得分:0)
正如已经提到的,beforeEach
在每次测试之前被称为 。
使用beforeAll
和beforeEach
的另一个重要优点是,您可以将返回Promise
的函数或返回async
的函数和{{1} }将等待生成的Jest
解析后再继续。
因此Promise
和beforeAll
必须用于任何异步设置工作:
beforeEach