Из-за способа, которым Jest выполняет тесты (из-за насмешек и параллелизма среди прочих), небезопасно назначать внешние переменные в beforeEach
и друзьях.
Вместо этого для такого типа шаблона лучше определить общий метод и вызывать его вручную в каждом тесте.
describe('DropDown', () => {
function prepare() {
const store = mockStore({
dropDown: {},
});
const wrapper = mount(
<Provider store={store}>
<DropDown />
</Provider>,
);
return { store, wrapper };
}
it('Search should update the list', () => {
const { wrapper } = prepare();
const searchField = wrapper.find('.textInput');
searchField.simulate('change', {
target: {
value: 'First customer',
},
});
expect(wrapper.find('.customersList .list li').length).toBe(1);
});
});
Метод prepare
возвращает переменные, используемые в тестах. Каждый тест может получить то, что ему нужно. Вы также можете улучшить метод с помощью дополнительных параметров, если, скажем, для теста вам нужно создать немного другое хранилище.
РЕДАКТИРОВАТЬ: этот шаблон подробно описан здесь с библиотекой тестирования https://kentcdodds.com/blog/avoid-nesting-when-youre-testing