Реагировать - Тестирование компонента контроллера с шуткой / ферментом - PullRequest
1 голос
/ 11 марта 2020

Я зашел в тупик, так как не уверен, как мне следует go проверить этот специфический c «компонент». В общем, у меня есть компонент контроллера, который является компонентом верхнего уровня. Он не принимает никаких реквизитов и визуализируется компонентом маршрута. Компонент контроллера имеет несколько функций, некоторые из которых передаются в дочерний компонент и запускаются обработчиками событий.

Кроме того, компонент контроллера использует API, который присоединен к объекту глобального окна. API принимает функцию обратного вызова, которая затем будет вызываться при вызове определенных методов в API после запуска методов. Прямо сейчас я понятия не имею, как я должен попытаться проверить контроллер. Я проверил все дочерние компоненты и убедился, что все работает, но некоторые из этих функций в компоненте контроллера будут иметь решающее значение для проверки того, что они действительно работают.

const MyController = () => {
const [api, setApi] = useState(null)

useEffect(() => {
const globalApi = window.globalApi
setApi(globalApi)
init()
}, [])

function callBack(e) {
    console.log(e)
}

function init() {
        api.init(callBack)
}

function close() {
    api.close()
}

return (
    <MyComponent 
    close={close}
    />
)

}

1 Ответ

1 голос
/ 11 марта 2020

Смоделируйте ваш API и посмотрите, называется ли он

. Вы можете следить за вызовом API из глобального (если я правильно прочитал ваш код). Затем вы можете сделать это.

const apiCall = jest.spyOn(global.globalApi, 'init').mockImplementation(jest.fn);
expect(apiCall).toHaveBeenCalled();

Есть пара тестов, которые вы можете сделать. Проверьте, сколько раз это называется, должно быть один раз для вас. и проверьте, с какими аргументами он был вызван.

Примечание

Использование global в шпионе. global относится к окну.

Дополнительные тесты

Помимо этих тестов, я бы предложил сделать снимок поверхностного рендера, просто чтобы убедиться, что рендер всегда работает.

...