I am trying to write the unit test for following javascript function.
const $ = require("jquery");
const Toggle = (function (toggle, $) {
toggle.clickHandler = () => {
$(".active").not(this).removeClass("active").next().hide(300);
$(this).toggleClass("active");
if (false == $(this).next().is(":visible")) {
$("#accordion > ul").slideUp(300);
}
$(this).next().slideToggle(300);
};
$("#accordion > li > div").on("click", toggle.clickHandler);
return {
toggle,
};
})({}, $);
module.exports = Toggle.toggle;
I have written following jest test
const toggle = require("./toggle");
const $ = require("jquery");
jest.dontMock("jquery");
jest.dontMock("./acc");
describe("Toggle", () => {
it("It should call click handler", () => {
document.body.innerHTML = ` <ul id="accordion">
<li>
<div>Sports</div>
<ul>
<li><a href="#">Golf</a></li>
<li><a href="#">Cricket</a></li>
<li><a href="#">Football</a></li>
</ul>
</li>
</ul>
`;
const spy = jest.spyOn(toggle, "clickHandler");
$("div").trigger("click");
$("div").trigger("click");
expect(spy).toBeCalledTimes(2);
});
});
But when I am running the test I am getting the following error.
Expected number of calls: 2 Received number of calls: 0