我有一个React组件,在安装时会创建一个脚本元素,然后加载ZenDesk脚本(包括语句$ zopim.livechat.window.hide(),或者如果已经加载,则调用$ zopim.livechat.window .hide())。
const scriptElement = document.createElement('script');
const scriptNode= document.createTextNode(zopim == null ? zopimJs : '$zopim.livechat.window.hide()');
scriptElement.async = true;
scriptElement.appendChild(scriptNode);
document.body.appendChild(scriptElement);
如何使用酶/笑话对此进行测试? 理想情况下,我想测试是否调用了hide()函数(而不是检查该调用的结果)。
或者也许我需要以不同的方式对待整个事情?
欢迎提出任何想法
欢呼
添加:zopim初始化脚本是这样的:
window.$zopim||function(e,t){var i=$zopim=function(e){i._.push(e)},o=i.s=e.createElement(t),a=e.getElementsByTagName(t)[0];i.set=function(e){i.set._.push(e)};i._=[];i.set._=[];o.async=!0;o.setAttribute("charset","utf-8");o.src="https://v2.zopim.com/?58crBwjpXFSYXv6eloiat27G1SqQOJvC";i.t=+new Date;o.type="text/javascript";a.parentNode.insertBefore(o,a)}(document,"script");$zopim(function(){var t="Customer Support";var i="Customer Support";var o="Please enter your message below. An expert will get back to you shortly.";$zopim.livechat.setOnConnected(function(){var e=$zopim.livechat.departments.getDepartment(t);if(typeof e=="undefined"){$zopim.livechat.setStatus("offline");$zopim.livechat.hideAll();return false}if(e.status=="offline"){$zopim.livechat.setStatus("offline");$zopim.livechat.hideAll()}else{$zopim.livechat.window.setTitle(i);$zopim.livechat.theme.setColor("#FF6B00");$zopim.livechat.theme.reload();$zopim.livechat.addTags(t);$zopim.livechat.departments.filter("");$zopim.livechat.prechatForm.setGreetings(o);$zopim.livechat.departments.setVisitorDepartment(t);$zopim.livechat.window.hide()}})});
那么我将如何在测试中模拟呢?以及该脚本异步运行的事实-安装组件后如何最好地对其进行检查?
答案 0 :(得分:1)
您可以添加一个调用$zopim.livechat.window.hide()
的类方法,并使用观察程序检查该类方法是否被调用。
根据您的示例代码,很难不知道您在测试套件中模拟了多少zopim
功能就可以进行更深入的测试。