Я пишу модульные тесты для простого проекта React и обнаруживаю, что тесты не выполняются, только когда покрытие включено. Пример компонента:
import React from 'react'
import { connect } from 'react-redux'
import { requestPosts } from '../actions'
export const LoadSubreddit = ({ children, dispatch }) => (
<div>
<button onClick={() => {
dispatch(requestPosts('newzealand'))
}}>
Fetch Posts
</button>
{children}
</div>
)
export default connect()(LoadSubreddit)
и связанный с ним тест:
import React from 'react'
import {shallow, mount} from 'enzyme'
import {LoadSubreddit} from './LoadSubreddit'
import {requestPosts} from '../actions'
test('loadSubreddit renders', ()=> {
const wrapper = shallow(<LoadSubreddit> <p>hello</p></LoadSubreddit>)
expect(wrapper).toMatchSnapshot()
})
test('dispatches action', ()=> {
const fakeDispatch = jest.fn()
const comp = shallow(<LoadSubreddit dispatch={fakeDispatch}/>)
comp.displayname = "LoadSubreddit"
expect(comp.find('button')).toHaveLength(1);
comp.find('button').at(0).props().onClick()
expect(fakeDispatch).toHaveBeenCalledWith(requestPosts('newzealand'))
})
Обратите внимание, что все утверждения во втором тесте не пройдены, поэтому компонент вообще ничего не возвращает.
Вы можете увидеть репо здесь (обратите внимание, что это именно каталог "w6-d3-asyn c -redux-Stories-saga" внутри этого репо, который я использую как магазин для ряда проектов). Что еще более странно, если вы сравните разрушающий проект с еще одним моим , построенным с тем же стеком, тесты пройдут нормально, охват или отсутствие покрытия. Насколько я могу судить, нет существенной разницы в способах проведения тестов в двух репозиториях (сериализатор энзимов к json реализован немного по-разному, но я обменивался реализациями в обоих репозиториях, и это не так. ничего не меняю).
Единственное значимое различие, которое я вижу, состоит в том, что, поскольку сломанный проект был написан чуть позже, его модули узлов в основном немного более поздние версии тех, которые использовались в рабочем проекте. Но довольно сложно представить, что какой-либо из обновленных узловых модулей сломает Jest так сильно, и я буду единственным, кто заметит.