Для бутстрапа его работы
<span class="form-control">$ <input type="text"/></span>
Не используйте class = "form-control" в поле ввода.
Некоторые важные моменты для рассмотрения.
Асинхронный код в ваших тестах
blockquote>Если вам нужно выполнять асинхронные задачи в ваших тестах, вам всегда нужно ждать, пока асинхронный материал не будет завершен. [ 117]
setTimeout(() => { mountWrapper.update() const SpyhandleChildClick = jest.spyOn(mountWrapper.instance(),'_handleChildClick') mountWrapper.find('.toggle').simulate('click') expect(SpyhandleChildClick).toHaveBeenCalled() // not called },0)
Выше в вашем коде у вас есть сегмент тайм-аута. Любое тестовое условие внутри этого блока кода не будет оцениваться, так как к моменту их оценки ваш «тестовый сеанс» уже закончится из-за характера aync.
Тестирование функций стрелок в React с помощью фермента - forceUpdate ()
blockquote>Похоже, что существует проблема с библиотекой ферментов, когда необходимо принудительно обновить реагировать компонент после шпионажа, чтобы зацепиться за метод. Пожалуйста, следуйте за вопросом github для получения дополнительной информации: https://github.com/airbnb/enzyme/issues/365
Я также немного очистил ваш тестовый код, чтобы сделать его более понятным !
// App.test.js import React from 'react'; import {enzyme} from 'enzyme'; import App from './App'; describe("App test cases", () => { it("should trigger _handleChildClick", async () => { window.fetch = jest.fn().mockImplementation(() => ({ status: 200, json: () => new Promise((resolve, reject) => { resolve({ name: "some data" }); }) })); const mountWrapper = mount(<App />); mountWrapper.update(); console.log("mountWrapper", mountWrapper.debug()); // showing the loader one //[FIX]This code will block and wait for your asynchronous tasks to be completed await new Promise(res => setTimeout(() => res(), 0)); mountWrapper.update(); console.log("mountWrapper", mountWrapper.debug()); // nothing showing expect(mountWrapper.find(".toggle").length).toEqual(1); //[FIX]Get a reference from the wrapper and force update after the spyOn call const instance = mountWrapper.instance(); const spy = jest.spyOn(instance, "_handleChildClick"); instance.forceUpdate(); mountWrapper.find(".toggle").simulate("click"); expect(spy).toHaveBeenCalled(); }); });
Демонстрационная ссылка в реальном времени: нажмите на вкладку «Тесты» в браузере, чтобы просмотреть результаты теста https://codesandbox.io/s/mz21kpm37j