");vwo_$('head').append(_vwo_sel);return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("HEAD")}}, ct_8d51c23d33e84810ce55ea8c0828172a:{ fn:function(executeTrigger, vwo_$) { (function(){let e=JSON.parse(localStorage.getItem('vwo_w_1733251067462')),t=null,l=null;e&&e.l_ts>0&&(t=(new Date).toISOString().slice(0,10),l=new Date(JSON.parse(e.l_ts)).toISOString().slice(0,10)),(t||l)&&t===l||executeTrigger()})() }}, ct_d22ec708a5e225534c3cad510c7fcae0:{ fn:function(executeTrigger, vwo_$) { (function(){var t=document.querySelector('#vwo-widget-1733251067462');t.addEventListener('close_button_clicked',(function(){try{var t=localStorage.getItem('vwo_w_1733251067462');t&&((t=JSON.parse(t)).d=1,localStorage.setItem('vwo_w_1733251067462',JSON.stringify(t)))}catch(t){}})),t.addEventListener('form_submitted',(function(){try{var t=localStorage.getItem('vwo_w_1733251067462');t&&((t=JSON.parse(t)).d=1,localStorage.setItem('vwo_w_1733251067462',JSON.stringify(t)))}catch(t){}}))})() }}, ct_399d01286bff372d4511bc06c74b274e:{ fn:function(executeTrigger, vwo_$) { (function(){setTimeout((function(){var e=document.querySelector("[vwo-widget-id='1733251067462']");e&&function(){var e="false";e="true"===e;var t=window._vwo_handleMutations||function(e,t){t()};this.querySelector(".vwo-modal__close-button").onclick=function(){t(this.parentNode,function(){this.parentNode&&this.parentNode.removeChild(this),this.dispatchEvent(new Event("close_button_clicked"))}.bind(this))}.bind(this),this.querySelector(".vwo-modal__form").onsubmit=function(n){t(this.parentNode,function(){if(e){n.preventDefault();var t=document.querySelector(".vwo-modal__form"),o=t.action||"",i=t.method||"get",d=new FormData(t),s=new URLSearchParams(d).toString(),r=new URL(o,document.baseURI),a=new XMLHttpRequest,c="get"===i?r.href+"?"+s:r.href;a.open(i,c,!0),"get"!==i&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),"get"===i?a.send():a.send(s),this.parentNode&&this.parentNode.removeChild(this)}this.dispatchEvent(new Event("form_submitted"))}.bind(this))}.bind(this)}.bind(e)()})),setTimeout((function(){document.dispatchEvent(new Event('vwo_widget_added_1733251067462'))}))})() }}, ct_e621749fbb73d0f15a8d08f6fd642ade:{ fn:function(executeTrigger, vwo_$) { (function(){let e=JSON.parse(localStorage.getItem('vwo_w_1737667621094')),t=null,l=null;e&&e.l_ts>0&&(t=(new Date).toISOString().slice(0,10),l=new Date(JSON.parse(e.l_ts)).toISOString().slice(0,10)),(t||l)&&t===l||executeTrigger()})() }}, ct_0d6b80be596184386eea2b504c429c73:{ fn:function(executeTrigger, vwo_$) { (function(){var t=document.querySelector('#vwo-widget-1737667621094');t.addEventListener('close_button_clicked',(function(){try{var t=localStorage.getItem('vwo_w_1737667621094');t&&((t=JSON.parse(t)).d=1,localStorage.setItem('vwo_w_1737667621094',JSON.stringify(t)))}catch(t){}})),t.addEventListener('form_submitted',(function(){try{var t=localStorage.getItem('vwo_w_1737667621094');t&&((t=JSON.parse(t)).d=1,localStorage.setItem('vwo_w_1737667621094',JSON.stringify(t)))}catch(t){}}))})() }}, ct_b492d4d3f1c9870da34aec1426cbf1be:{ fn:function(executeTrigger, vwo_$) { (function(){setTimeout((function(){var e=document.querySelector("[vwo-widget-id='1737667621094']");e&&function(){var e="false";e="true"===e;var t=window._vwo_handleMutations||function(e,t){t()};this.querySelector(".vwo-modal__close-button").onclick=function(){t(this.parentNode,function(){this.parentNode&&this.parentNode.removeChild(this),this.dispatchEvent(new Event("close_button_clicked"))}.bind(this))}.bind(this),this.querySelector(".vwo-modal__form").onsubmit=function(n){t(this.parentNode,function(){if(e){n.preventDefault();var t=document.querySelector(".vwo-modal__form"),o=t.action||"",i=t.method||"get",d=new FormData(t),s=new URLSearchParams(d).toString(),r=new URL(o,document.baseURI),a=new XMLHttpRequest,c="get"===i?r.href+"?"+s:r.href;a.open(i,c,!0),"get"!==i&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),"get"===i?a.send():a.send(s),this.parentNode&&this.parentNode.removeChild(this)}this.dispatchEvent(new Event("form_submitted"))}.bind(this))}.bind(this)}.bind(e)()})),setTimeout((function(){document.dispatchEvent(new Event('vwo_widget_added_1737667621094'))}))})() }}, C_743027_62_1_2_0:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("addElement","BODY"); vwo_debug*/!(el=vwo_$("BODY")).find('[vwo-op-1745434129187=""]').length&&el.performOp(1745434129187).vwoElement({position:"append",layout:"modal-image-form-top",id:1733251067462,widgetId:"modal",html:'
',sks:{d:0,v:0,l_ts:0},sw:{"p_dsl":"1"},rec:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415722","filters":[]}],"dslv":2}},hw:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415725","filters":[]}],"dslv":2}},opId:1745434129187,js:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415728","filters":[]}],"dslv":2}}});})("BODY")}}, R_743027_62_1_2_0:{ fn:function(log,nonce=''){return (function(x) { if(!vwo_$.fn.vwoRevertHtml){ return; }; var el,ctx=vwo_$(x); /*vwo_debug log("Revert","addElement","BODY"); vwo_debug*/(el=vwo_$('[vwo-widget-id="1733251067462"]')).remove();})("BODY")}}, C_743027_62_1_3_0:{ fn:function(log,nonce=''){return (function(x) { try{ var _vwo_sel = vwo_$("`); !vwo_$("head").find('#1745434139247').length && vwo_$('head').append(_vwo_sel);}catch(e) {VWO._.vAEH(e);} try{}catch(e) {VWO._.vAEH(e);} try{vwo_$.getScript("https://oclc.formstack.com/forms/js.php/italian_site_ebook?no_style_strict=1",(function(t,o,c){}));}catch(e) {VWO._.vAEH(e);} return vwo_$('head')[0] && vwo_$('head')[0].lastChild;})("head")}}, C_743027_45_1_2_0:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("content",".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)"); vwo_debug*/(el=vwo_$(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")).replaceWith2('

Je kunt op elk moment real-time updates over de beschikbaarheid van onze diensten raadplegen via ons systeemstatusdashboard (zie voorbeeldscherm hieronder). Bibliotheekmedewerkers kunnen zich ook aanmelden om via e-mail op de hoogte te blijven van de status van individuele diensten. Ervaar je problemen met één van onze diensten? Neem dan contact op met OCLC Support. Werk je bij een bibliotheek die Wise gebruikt? Dan kan de organisatie bij wie je Wise afneemt je meer vertellen over het dashboard voor jouw bibliotheeksysteem.

'),(el=vwo_$(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")).vwoCss({transition:"none !important"});})(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")}}, R_743027_45_1_2_0:{ fn:function(log,nonce=''){return (function(x) { if(!vwo_$.fn.vwoRevertHtml){ return; }; var el,ctx=vwo_$(x); /*vwo_debug log("Revert","content",".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)"); vwo_debug*/(el=vwo_$(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")).revertContentOp(),(el=vwo_$(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")).vwoRevertCss();})(".page-content > div:nth-of-type(1) > div:nth-of-type(4) > p:nth-of-type(1)")}}, GL_743027_45_pre:{ fn:function(VWO_CURRENT_CAMPAIGN, VWO_CURRENT_VARIATION,nonce = ""){try{!function(){try{var e=function(e){return Object.keys(e).find((function(e){return e.startsWith("__reactInternalInstance$")||e.startsWith("__reactFiber$")}))},t=function(e,t){if(e&&t)return e[t]},n=function(e,t,n){var i=(i=e.nodeName)&&i.toLowerCase();t.stateNode=e,t.child=null,t.tag=e.nodeType===Node.ELEMENT_NODE?5:6,t.type&&(t.type=t.elementType="vwo-"+i),t.alternate&&(t.alternate.stateNode=e),e[n]=t},i=function(e,t){var n=Date.now();!function i(){var o=Object.keys(t).find((function(e){return e.startsWith("__reactProps$")}))||"",r=Date.now();if(o&&t[o])switch(e.name){case"href":t[o].href=e.value;break;case"onClick":t[o].onClick&&delete t[o].onClick;break;case"onChange":t[o].onChange&&t[o].onChange({target:t})}o||3e3{l.addEventListener("click",(function(){e(t,function(){o.classList.toggle("vwo-hide"),i.classList.toggle("vwo-hide"),n.classList.toggle("vwo-hide")}.bind(t))}))}),e(t,function(){}.bind(t))}.bind(e)()})),setTimeout(()=>{document.querySelector(".vwo-call-main-module").classList.toggle("vwo-hide")},300),setTimeout((function(){document.dispatchEvent(new Event('vwo_widget_added_1744039653040'))}))})() }}, R_743027_62_1_3_2:{ fn:function(log,nonce=''){return (function(x) { if(!vwo_$.fn.vwoRevertHtml){ return; }; var el,ctx=vwo_$(x); /*vwo_debug log("Revert","AIEditor",".vwo-modal__body"); vwo_debug*/(el=vwo_$(".vwo-modal__body")).revertContentOp();})(".vwo-modal__body")}}, C_743027_62_1_3_2:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("AIEditor",".vwo-modal__body"); vwo_debug*/!(el=vwo_$(".vwo-modal__body")).parent().find('[vwo-op-1745434129225=""]').length&&el.execCode((function(){var e=document.createElement("style");e.className="vwo_variation",e.innerHTML="/** CSS START **/\n/** Message ID: 8140, Generation Index: 0 **//** GENERATION END **//** CSS END **/",document.body.append(e), /** JS START **/ /** Message ID: 8140, Generation Index: 0 **/ vwo_$(".vwo-modal__body .vwo-modal__form").replaceWith('\n\t \n\t')})),el.attr("vwo-op-1745434129225","");})(".vwo-modal__body")}}, R_743027_62_1_3_1:{ fn:function(log,nonce=''){return (function(x) { if(!vwo_$.fn.vwoRevertHtml){ return; }; var el,ctx=vwo_$(x); /*vwo_debug log("Revert","addElement","BODY"); vwo_debug*/(el=vwo_$('[vwo-widget-id="1737667621094"]')).remove();})("BODY")}}, C_743027_62_1_3_1:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("addElement","BODY"); vwo_debug*/!(el=vwo_$("BODY")).find('[vwo-op-1745434129224=""]').length&&el.performOp(1745434129224).vwoElement({position:"append",layout:"modal-form",id:1737667621094,widgetId:"modal",html:'
',sks:{d:0,v:0,l_ts:0},sw:{"p_dsl":"1"},rec:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415731","filters":[]}],"dslv":2}},hw:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415734","filters":[]}],"dslv":2}},opId:1745434129224,js:{"p_dsl":{"cnds":[{"id":1000,"event":"trigger.12415737","filters":[]}],"dslv":2}}});})("BODY")}}, GL_743027_23_post:{ fn:function(VWO_CURRENT_CAMPAIGN, VWO_CURRENT_VARIATION,nonce = ""){}}, GL_743027_23_pre:{ fn:function(VWO_CURRENT_CAMPAIGN, VWO_CURRENT_VARIATION,nonce = ""){try{var _vwoCurrentPageUrl=window.location.href,matchRegex=VWO._.matchRegex;vwo_$("[vwo-widget-id]").remove();var mpClass=vwo_$("html").get(0).className.match(/(?:\s|^)(vwo_p_s_[0-9a-f]{32})(?:\s|$)/);mpClass&&vwo_$("html").removeClass(mpClass[1]),matchRegex(_vwoCurrentPageUrl,"^https://oclc.org/en/community-center.html/?(?:[?#].*)?$")&&vwo_$("html").addClass("vwo_p_s_6bb732c934d4cdb972f417015ae64276");}catch(e){}}}, C_743027_23_1_6_0:{ fn:function(log,nonce=''){return (function(x) {var el,ctx=vwo_$(x); /*vwo_debug log("editElement","#cc-hero > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(2) > a:nth-of-type(1)"); vwo_debug*/(el=vwo_$("html.vwo_p_s_6bb732c934d4cdb972f417015ae64276 #cc-hero > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(2) > a:nth-of-type(1)")).vwoAttr({href:"https://community.oclc.org/t5/wms-general/ct-p/wms"}),el.vwoCss({transition:"none !important"});})("#cc-hero > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > div:nth-of-type(1) > p:nth-of-type(2) > a:nth-of-type(1)")}}, C_743027_26_1_3_0:{ fn:function(log,nonce=''){return (function(x) {try{; /*vwo_debug log("content","head"); vwo_debug*/ piAId="48682",piCId="",piHostname="connect.oclc.org",function(){function t(){var t=document.createElement("script");t.type="text/javascript",t.src=("https:"==document.location.protocol?"https://":"http://")+piHostname+"/pd.js";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(t,e)}window.attachEvent?window.attachEvent("onload",t):window.addEventListener("load",t,!1)}();}catch(e){};})("HEAD")}}, C_743027_26_1_2_0:{ fn:function(log,nonce=''){return (function(x) {try{; /*vwo_debug log("content","head"); vwo_debug*/ piAId="863361",piCId="",piHostname="learn.oclc.org",function(){function t(){var t=document.createElement("script");t.type="text/javascript",t.src=("https:"==document.location.protocol?"https://":"http://")+piHostname+"/pd.js";var e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(t,e)}window.attachEvent?window.attachEvent("onload",t):window.addEventListener("load",t,!1)}();}catch(e){};})("HEAD")}}},rules:[{"tags":[{"data":{"campaigns":[{"c":62,"g":2}],"type":"m"},"metricId":1302544,"id":"metric"}],"triggers":["11901466"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.62"}],"triggers":["12415740"]},{"tags":[{"data":{"campaigns":[{"c":57,"g":2}],"type":"m"},"metricId":1246453,"id":"metric"}],"triggers":["11348776"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.50"}],"triggers":["11348713","11348716","11607274"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.23"}],"triggers":["3467935","3467937","3891148","3868378","3868381","3699280","3868375","3868372","3868366","3868369","3868363","3868360"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.53"}],"triggers":["10597825","10597828","10597831"]},{"tags":[{"data":{"campaigns":[{"c":50,"g":1}],"type":"m"},"metricId":1094613,"id":"metric"},{"data":{"campaigns":[{"c":53,"g":1}],"type":"m"},"metricId":1094613,"id":"metric"}],"triggers":["9901843"]},{"tags":[{"data":{"campaigns":[{"c":23,"g":1}],"type":"m"},"metricId":393026,"id":"metric"}],"triggers":["3699301"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.57"}],"triggers":["13531875","13531878","13872894"]},{"tags":[{"data":{"campaigns":[{"c":52,"g":2}],"type":"m"},"metricId":1209280,"id":"metric"}],"triggers":["10859356"]},{"tags":[{"data":{"campaigns":[{"c":23,"g":2}],"type":"m"},"metricId":460042,"id":"metric"},{"data":{"campaigns":[{"c":52,"g":3}],"type":"m"},"metricId":460042,"id":"metric"}],"triggers":["3891109"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.33"}],"triggers":["3467935","3467937","4049039"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.52"}],"triggers":["7538449"]},{"tags":[{"data":{"campaigns":[{"c":63,"g":6}],"type":"m"},"metricId":1420032,"id":"metric"}],"triggers":["13465485"]},{"tags":[{"data":{"campaigns":[{"c":23,"g":3}],"type":"g"},"metricId":0,"id":"metric"}],"triggers":["11218597"]},{"tags":[{"data":{"campaigns":[{"c":33,"g":1}],"type":"g"},"metricId":0,"id":"metric"}],"triggers":["4049042"]},{"tags":[{"data":{"campaigns":[{"c":63,"g":5}],"type":"m"},"metricId":1420029,"id":"metric"}],"triggers":["13465482"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.24"}],"triggers":["3926488","3926491","3926494","3926497","3926500","3926503","3926506","3926509"]},{"tags":[{"data":{"campaigns":[{"c":62,"g":3}],"type":"m"},"metricId":1109587,"id":"metric"}],"triggers":["11218462"]},{"tags":[{"data":{"campaigns":[{"c":26,"g":1}],"type":"m"},"metricId":418573,"id":"metric"}],"triggers":["3474331"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.45"}],"triggers":["7538449","7538452"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.63"}],"triggers":["13951224"]},{"tags":[{"id":"runCampaign","priority":4,"data":"campaigns.26"}],"triggers":["3467935","3467937","3474327","3474329"]},{"tags":[{"data":{"campaigns":[{"c":24,"g":1}],"type":"m"},"metricId":394880,"id":"metric"}],"triggers":["3204947"]},{"tags":[{"data":{"campaigns":[{"c":45,"g":2}],"type":"m"},"metricId":856873,"id":"metric"}],"triggers":["7538455"]},{"tags":[{"id":"urlChange"}],"triggers":["75"]},{"tags":[{"id":"checkEnvironment"}],"triggers":["5"]},{"tags":[{"id":"groupCampaigns","priority":2},{"id":"prePostMutation","priority":3}],"triggers":["8"]},{"tags":[{"id":"visibilityService","priority":2}],"triggers":["9"]},{"tags":[{"id":"runTestCampaign"}],"triggers":["2"]}],pages:{"ec":[{"256778":{"inc":["o",["url","urlReg","(?i).*"]]}},{"567821":{"inc":["o",["url","urlReg","(?i).*https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org.*"],["url","urlReg","(?i).*https?\\:\\\/\\\/(w{3}\\.)?blog\\.oclc\\.org.*"],["url","urlReg","(?i).*https?\\:\\\/\\\/(w{3}\\.)?policies\\.oclc\\.org.*"]]}},{"1935877":{"inc":["o",["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/community\\-center\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/tipasa\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/worldshare\\-ill\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/ezproxy\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/capira\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/choreo\\-insights\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i).*https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/developer\\\/.*"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/worldcat\\-org\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/contentdm\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/worldshare\\-management\\-services\\.html\\\/?(?:[\\?#].*)?$"],["url","urlReg","(?i)^https?\\:\\\/\\\/(w{3}\\.)?oclc\\.org\\\/.*\\\/greenglass\\.html\\\/?(?:[\\?#].*)?$"]]}}]},pagesEval:{"ec":[256778,567821,1935877]},stags:{}}})(); ;;var commonWrapper=function(argument){if(!argument){argument={valuesGetter:function(){return{}},valuesSetter:function(){},verifyData:function(){return{}}}}const getVisitorUuid=function(){if(window._vwo_acc_id>=1037725){return window.VWO&&window.VWO.get("visitor.id")}else{return window.VWO._&&window.VWO._.cookies&&window.VWO._.cookies.get("_vwo_uuid")}};var pollInterval=100;var timeout=6e4;return function(){var accountIntegrationSettings={};var _interval=null;function waitForAnalyticsVariables(){try{accountIntegrationSettings=argument.valuesGetter();accountIntegrationSettings.visitorUuid=getVisitorUuid()}catch(error){accountIntegrationSettings=undefined}if(accountIntegrationSettings&&argument.verifyData(accountIntegrationSettings)){argument.valuesSetter(accountIntegrationSettings);return 1}return 0}var currentTime=0;_interval=setInterval((function(){currentTime=currentTime||performance.now();var result=waitForAnalyticsVariables();if(result||performance.now()-currentTime>=timeout){clearInterval(_interval)}}),pollInterval)}}; commonWrapper({valuesGetter:function(){return {"ga4s":0}},valuesSetter:function(data){var singleCall=data["ga4s"]||0;if(singleCall){window.sessionStorage.setItem("vwo-ga4-singlecall",true)}var ga4_device_id="";if(typeof window.VWO._.cookies!=="undefined"){ga4_device_id=window.VWO._.cookies.get("_ga")||""}if(ga4_device_id){window.vwo_ga4_uuid=ga4_device_id.split(".").slice(-2).join(".")}},verifyData:function(data){if(typeof window.VWO._.cookies!=="undefined"){return window.VWO._.cookies.get("_ga")||""}else{return false}}})(); var pushBasedCommonWrapper=function(argument){var firedCamp={};if(!argument){argument={integrationName:"",getExperimentList:function(){},accountSettings:function(){},pushData:function(){}}}return function(){window.VWO=window.VWO||[];const getVisitorUuid=function(){if(window._vwo_acc_id>=1037725){return window.VWO&&window.VWO.get("visitor.id")}else{return window.VWO._&&window.VWO._.cookies&&window.VWO._.cookies.get("_vwo_uuid")}};var sendDebugLogsOld=function(expId,variationId,errorType,user_type,data){try{var errorPayload={f:argument["integrationName"]||"",a:window._vwo_acc_id,url:window.location.href,exp:expId,v:variationId,vwo_uuid:getVisitorUuid(),user_type:user_type};if(errorType=="initIntegrationCallback"){errorPayload["log_type"]="initIntegrationCallback";errorPayload["data"]=JSON.stringify(data||"")}else if(errorType=="timeout"){errorPayload["timeout"]=true}if(window.VWO._.customError){window.VWO._.customError({msg:"integration debug",url:window.location.href,lineno:"",colno:"",source:JSON.stringify(errorPayload)})}}catch(e){window.VWO._.customError&&window.VWO._.customError({msg:"integration debug failed",url:"",lineno:"",colno:"",source:""})}};var sendDebugLogs=function(expId,variationId,errorType,user_type){var eventName="vwo_debugLogs";var eventPayload={};try{eventPayload={intName:argument["integrationName"]||"",varId:variationId,expId:expId,type:errorType,vwo_uuid:getVisitorUuid(),user_type:user_type};if(window.VWO._.event){window.VWO._.event(eventName,eventPayload,{enableLogs:1})}}catch(e){eventPayload={msg:"integration event log failed",url:window.location.href};window.VWO._.event&&window.VWO._.event(eventName,eventPayload)}};const callbackFn=function(data){if(!data)return;var expId=data[1],variationId=data[2],repeated=data[0],singleCall=0,debug=0;var experimentList=argument.getExperimentList();var integrationName=argument["integrationName"]||"vwo";if(typeof argument.accountSettings==="function"){var accountSettings=argument.accountSettings();if(accountSettings){singleCall=accountSettings["singleCall"];debug=accountSettings["debug"]}}if(debug){sendDebugLogs(expId,variationId,"intCallTriggered",repeated)}if(singleCall&&(repeated==="vS"||repeated==="vSS")||firedCamp[expId]){return}window.expList=window.expList||{};var expList=window.expList[integrationName]=window.expList[integrationName]||[];if(expId&&variationId&&["VISUAL_AB","VISUAL","SPLIT_URL"].indexOf(_vwo_exp[expId].type)>-1){if(experimentList.indexOf(+expId)!==-1){firedCamp[expId]=variationId;var visitorUuid=getVisitorUuid();var pollInterval=100;var currentTime=0;var timeout=6e4;var user_type=_vwo_exp[expId].exec?"vwo-retry":"vwo-new";var interval=setInterval((function(){if(expList.indexOf(expId)!==-1){clearInterval(interval);return}currentTime=currentTime||performance.now();var toClearInterval=argument.pushData(expId,variationId,visitorUuid);if(debug&&toClearInterval){sendDebugLogsOld(expId,variationId,"",user_type);sendDebugLogs(expId,variationId,"intDataPushed",user_type)}var isTimeout=performance.now()-currentTime>=timeout;if(isTimeout&&debug){sendDebugLogsOld(expId,variationId,"timeout",user_type);sendDebugLogs(expId,variationId,"intTimeout",user_type)}if(toClearInterval||isTimeout){clearInterval(interval)}if(toClearInterval){window.expList[integrationName].push(expId)}}),pollInterval||100)}}};window.VWO.push(["onVariationApplied",callbackFn]);window.VWO.push(["onVariationShownSent",callbackFn])}}; var surveyDataCommonWrapper=function(argument){if(!argument){argument={getCampaignList:function(){return[]},surveyStatusChange:function(){},answerSubmitted:function(){}}}return function(){window.VWO=window.VWO||[];function getValuesFromAnswers(answers){var values=[];for(var i=0;i=timeout;if(toClearInterval||isTimeout){clearInterval(interval)}}),pollInterval)}}window.VWO.push(["onSurveyShown",function(data){commonSurveyCallback(data,argument.surveyStatusChange,"surveyShown")}]);window.VWO.push(["onSurveyCompleted",function(data){commonSurveyCallback(data,argument.surveyStatusChange,"surveyCompleted")}]);window.VWO.push(["onSurveyAnswerSubmitted",function(data){commonSurveyCallback(data,argument.answerSubmitted,"surveySubmitted")}])}}; (function(){var VWOOmniTemp={};window.VWOOmni=window.VWOOmni||{};for(var key in VWOOmniTemp)Object.prototype.hasOwnProperty.call(VWOOmniTemp,key)&&(window.VWOOmni[key]=VWOOmniTemp[key]);window._vwoIntegrationsLoaded=1;pushBasedCommonWrapper({integrationName:"GA4",getExperimentList:function(){return [21,24,26,23,33,45,53,52,62,63,50,57]},accountSettings:function(){var accountIntegrationSettings={"dataVariable":"dataLayer","manualSetup":true,"setupVia":"gtm"};if(accountIntegrationSettings["debugType"]=="ga4"&&accountIntegrationSettings["debug"]){accountIntegrationSettings["debug"]=1}else{accountIntegrationSettings["debug"]=0}return accountIntegrationSettings},pushData:function(expId,variationId){var accountIntegrationSettings={"dataVariable":"dataLayer","manualSetup":true,"setupVia":"gtm"};var ga4Setup=accountIntegrationSettings["setupVia"]||"gtag";if(typeof window.gtag!=="undefined"&&ga4Setup=="gtag"){window.gtag("event","VWO",{vwo_campaign_name:window._vwo_exp[expId].name+":"+expId,vwo_variation_name:window._vwo_exp[expId].comb_n[variationId]+":"+variationId});window.gtag("event","experience_impression",{exp_variant_string:"VWO-"+expId+"-"+variationId});return true}return false}})();pushBasedCommonWrapper({integrationName:"GA4-GTM",getExperimentList:function(){return [21,24,26,23,33,45,53,52,62,63,50,57]},accountSettings:function(){var accountIntegrationSettings={"dataVariable":"dataLayer","manualSetup":true,"setupVia":"gtm"};if(accountIntegrationSettings["debugType"]=="gtm"&&accountIntegrationSettings["debug"]){accountIntegrationSettings["debug"]=1}else{accountIntegrationSettings["debug"]=0}return accountIntegrationSettings},pushData:function(expId,variationId){var accountIntegrationSettings={"dataVariable":"dataLayer","manualSetup":true,"setupVia":"gtm"};var ga4Setup=accountIntegrationSettings["setupVia"]||"gtm";var dataVariable=accountIntegrationSettings["dataVariable"]||"dataLayer";if(typeof window[dataVariable]!=="undefined"&&ga4Setup=="gtm"){window[dataVariable].push({event:"vwo-data-push-ga4",vwo_exp_variant_string:"VWO-"+expId+"-"+variationId});return true}return false}})(); ;})();(function(){window.VWO=window.VWO||[];var pollInterval=100;var _vis_data={};var intervalObj={};var analyticsTimerObj={};var experimentListObj={};window.VWO.push(["onVariationApplied",function(data){if(!data){return}var expId=data[1],variationId=data[2];if(expId&&variationId&&["VISUAL_AB","VISUAL","SPLIT_URL"].indexOf(window._vwo_exp[expId].type)>-1){}}])})();; ;var vD=VWO.data||{};VWO.data={content:{"fns":{"list":{"args":{"1":{}},"vn":1}}},as:"r5.visualwebsiteoptimizer.com",dacdnUrl:"https://dev.visualwebsiteoptimizer.com",accountJSInfo:{"rp":7,"gC":[{"c":[1,20],"wt":{"1":99,"20":1},"t":1,"et":2,"id":1},{"c":[50,57],"t":1,"p":[50,57],"et":2,"id":2},{"c":[63,68],"wt":{"68":25,"63":75},"t":1,"et":2,"id":3}],"ts":1746846175,"noSS":false,"pc":{"t":0,"a":0},"pvn":-1}};for(var k in vD){VWO.data[k]=vD[k]};;var gcpfb=function(a,loadFunc,status,err,success){function vwoErr() {_vwo_err({message:"Google_Cdn failing for " + a + ". Trying Fallback..",code:"cloudcdnerr",status:status});} if(a.indexOf("/cdn/")!==-1){loadFunc(a.replace("cdn/",""),err,success); vwoErr(); return true;} else if(a.indexOf("/dcdn/")!==-1&&a.indexOf("evad.js") !== -1){loadFunc(a.replace("dcdn/",""),err,success); vwoErr(); return true;}};window.VWO=window.VWO || [];window.VWO._= window.VWO._ || {};window.VWO._.gcpfb=gcpfb;;var d={cookie:document.cookie,URL:document.URL,referrer:document.referrer};var w={VWO:{_:{}},location:{href:window.location.href,search:window.location.search},_vwoCc:window._vwoCc};;window._vwo_cdn="https://dev.visualwebsiteoptimizer.com/cdn/";window._vwo_apm_debug_cdn="https://dev.visualwebsiteoptimizer.com/cdn/";window.VWO._.useCdn=true;window.vwo_eT="br";window._VWO=window._VWO||{};window._VWO.fSeg=["21"];window._VWO.dcdnUrl="/dcdn/settings.js";window.VWO.sTs=1746800170;window._VWO._vis_nc_lib=window._vwo_cdn+"edrv/nc-dfdc2d253f5db0207d2bf0b70396b215br.js";var loadWorker=function(url){_vwo_code.load(url, { dSC: true, onloadCb: function(xhr,a){window._vwo_wt_l=true;if(xhr.status===200 ||xhr.status===304){var code="var window="+JSON.stringify(w)+",document="+JSON.stringify(d)+";window.document=document;"+xhr.responseText;var blob=new Blob([code||"throw new Error('code not found!');"],{type:"application/javascript"}),url=URL.createObjectURL(blob);window.mainThread={webWorker:new Worker(url)};window.vwoChannelFW=new MessageChannel();window.vwoChannelToW=new MessageChannel();window.mainThread.webWorker.postMessage({vwoChannelToW:vwoChannelToW.port1,vwoChannelFW:vwoChannelFW.port2},[vwoChannelToW.port1, vwoChannelFW.port2]);if(!window._vwo_mt_f)return window._vwo_wt_f=true;_vwo_code.addScript({text:window._vwo_mt_f});delete window._vwo_mt_f}else{if(gcpfb(a,loadWorker,xhr.status)){return;}_vwo_code.finish("&e=loading_failure:"+a)}}, onerrorCb: function(a){if(gcpfb(a,loadWorker)){return;}window._vwo_wt_l=true;_vwo_code.finish("&e=loading_failure:"+a);}})};loadWorker("https://dev.visualwebsiteoptimizer.com/cdn/edrv/worker-e94512e06ec724b92513f0b4ae3131fabr.js");;var _vis_opt_file;var _vis_opt_lib;if(window.VWO._.allSettings.dataStore.previewExtraSettings!=undefined&&window.VWO._.allSettings.dataStore.previewExtraSettings.isSurveyPreviewMode){var surveyHash=window.VWO._.allSettings.dataStore.plugins.LIBINFO.SURVEY_DEBUG_EVENTS.HASH;var param1="evad.js?va=";var param2="&d=debugger_new";var param3="&sp=1&a=743027&sh="+surveyHash;_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?param1+"vanj"+param2:param1+"va_gq"+param2:param1+"edrv/va_gq-acd7a320b0168785e2194a31f953a5bdbr.js"+param2;_vis_opt_file=_vis_opt_file+param3;_vis_opt_lib="https://dev.visualwebsiteoptimizer.com/dcdn/"+_vis_opt_file}else if(window.VWO._.allSettings.dataStore.mode!=undefined&&window.VWO._.allSettings.dataStore.mode=="PREVIEW"){ var path1 = 'edrv/pd_'; var path2 = window.VWO._.allSettings.dataStore.plugins.LIBINFO.EVAD.HASH + ".js"; ;_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?path1+"vanj.js":path1+"va_gq"+path2:path1+"edrv/va_gq-acd7a320b0168785e2194a31f953a5bdbr.js"+path2;_vis_opt_lib="https://dev.visualwebsiteoptimizer.com/cdn/"+_vis_opt_file}else{_vis_opt_file=vwoCode.use_existing_jquery&&typeof vwoCode.use_existing_jquery()!=="undefined"?vwoCode.use_existing_jquery()?"edrv/vanj-87cfdeebda402bd7ad27802ab1bdc6e2br.js":"edrv/va_gq-acd7a320b0168785e2194a31f953a5bdbr.js":"edrv/va_gq-acd7a320b0168785e2194a31f953a5bdbr.js"}window._vwo_library_timer=setTimeout((function(){vwoCode.removeLoaderAndOverlay&&vwoCode.removeLoaderAndOverlay();vwoCode.finish()}),vwoCode.library_tolerance&&typeof vwoCode.library_tolerance()!=="undefined"?vwoCode.library_tolerance():2500),_vis_opt_lib=typeof _vis_opt_lib=="undefined"?window._vwo_cdn+_vis_opt_file:_vis_opt_lib;var loadLib=function(url){_vwo_code.load(url, { dSC: true, onloadCb:function(xhr,a){window._vwo_mt_l=true;if(xhr.status===200 || xhr.status===304){if(!window._vwo_wt_f)return window._vwo_mt_f=xhr.responseText;_vwo_code.addScript({text:xhr.responseText});delete window._vwo_wt_f;}else{if(gcpfb(a,loadLib,xhr.status)){return;}_vwo_code.finish("&e=loading_failure:"+a);}}, onerrorCb: function(a){if(gcpfb(a,loadLib)){return;}window._vwo_mt_l=true;_vwo_code.finish("&e=loading_failure:"+a);}})};loadLib(_vis_opt_lib);VWO.load_co=function(u,opts){return window._vwo_code.load(u,opts);};;;}}catch(e){_vwo_code.finish();_vwo_code.removeLoaderAndOverlay&&_vwo_code.removeLoaderAndOverlay();_vwo_err(e);window.VWO.caE=1}})(); Software Development Practices: Testing for Behavior, Not Just Success | OCLC Developer Network
Menu Search

Software Development Practices: Testing for Behavior, Not Just Success

This is the fourth and final post in our software development practices series. In our most recent post we discussed how Acceptance Criteria could be used to encapsulate the details of the user experience that the system should provide. This week we'll talk about how developers can use tests to determine whether or not the system is satisfying the Acceptance Criteria.

An Overview of tests

There are several different types of tests developers can use to ensure the system is working properly. Unit tests, integration tests, and acceptance tests are the most common. Each of these types of tests exercise different aspects of the system:

  • The purpose of unit tests is to ensure that individual units of code such as classes and functions perform properly.
  • Integration tests ensure that code across individual “units” work properly together. Integration testing is necessary to test behavior that spans components or systems and are good to use for code relies on a database, web service, or any other external system.
  • Acceptance testing ensures that the system meets its intended purpose.

I have recently become a fan of Behavior driven testing, which complements the development practices we’ve covered in this series so far. Before I get to that though, let me give you a little bit more background on test driven development to set the stage.

Test driven development

One pattern for creating tests as part of the development process is Test Driven Development (TDD). In TDD, the first step a developer takes when creating any new functionality is to write an automated test which will validate whether or not the functionality is working. As this is the first step, the test will always initially fail - the code which would make the test pass has not been written yet. Once the developer runs the test suite and verifies the test fails, they then write the code that will satisfy the test. Then the developer runs the tests again making sure all the tests pass. This is especially valuable as the code becomes more complex and the number of tests grows because, as all developers know first hand, any change to code might break existing functionality within the system. The process is repeated until all the new functionality has been added to the system.

One weakness of TDD is that it doesn't specify at what level any given test should be implemented. Tests can be at the high-level requirements, low-level function details or anywhere in between. As a developer, I could use test driven development techniques to only write unit tests and not integration or functional tests. Because of this it is possible to have tests that do not adequately cover the product owner's acceptance criteria. Another drawback is that tools traditionally used for unit or integration testing do not produce tests which are easily readable by product owners. Here’s an example of an automated acceptance test written using PHPUnit.

PhpUnitExample

Without comments in the code it would be incredibly difficult to know what behavior is being tested and what the expected outcome is supposed to be. This example is actually one of a series of three tests within the AddressTest test group in the WorldCat Registry Demo Application.

Behavior driven development

As a result of these shortcomings, another testing methodology has gained favor in the last 10 years. Dan North and others developed Behavior Driven Development (BDD) as a way to frame communication between developers, testers, and product owners. It follows the same techniques and principals as TDD, but seeks to deal with its shortcomings.

To do this, BDD asserts that the desired system behavior is what is always being tested. Additionally, tests are written using natural language so that they are easily understood by everyone, including product owners. In fact, some of the most popular BDD tools use the same Given, When, Then syntax we discussed in relation to acceptance criteria. Because Behavior driven tests are focused on testing the desired system behavior, they can more easily be tied to User Stories and acceptance criteria. In fact, some BDD tests include the user story and acceptance criteria:

 

BDTExample

You can see from looking at this example that the tests are human readable and use a format similar to user stories and acceptance criteria. The test or “feature” in BDD language corresponds to a single story. The “scenarios” within the “feature” each correspond to an acceptance criteria which is being tested. In our sample WorldCat Registry Hours application there are three features, one for each of the user stories.

Testing tools

Depending on your programming language of choice, there are a number of different testing tools available. Often these testing tools are available as an additional library. For example, PHPUnit is a very popular unit testing library for PHP. BDD testing libraries also exist and come in two flavors.

The “specification” flavor uses functional specifications as the input format for test scenarios. Rspec and PHPSpec are examples of this. These specifications are more technical in nature and not necessarily as effective for facilitating communication between developers and product owners.

The “story” flavor uses the Gherkin language for writing tests. This is the flavor of BDD tool I prefer because it closely ties tests, stories and acceptance criteria. These BDD testing libraries typically have code which transforms the natural language story and scenario statements into actions that execute the tests. The standard actions that come with a library can be extended by developers to suit a specific project’s needs. One popular tool for Behavior Driven Development is called Cucumber. There is a PHP implementation of this called Behat. The WorldCat Registry Hours Demo Application uses a combination of PHPUnit for unit testing and Behat for acceptance testing.

This post concludes our series on software development practices. We hope you have found some useful information for bridging the communication gaps between product owners and developers to build more collaborative development processes. We're planning to follow this series up with a couple of webinars on these topics. Stay tuned!

  • Karen Coombs

    Karen Coombs

    Senior Product Analyst

    Send an email