CINXE.COM
Newest 'sinon' Questions - Stack Overflow
<!DOCTYPE html> <html class="html__responsive " lang="en"> <head> <title>Newest 'sinon' Questions - Stack Overflow</title> <link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico?v=ec617d715196"> <link rel="apple-touch-icon" href="https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a"> <link rel="image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon.png?v=c78bd457575a"> <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml"> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0"> <meta property="og:type" content= "website" /> <meta property="og:url" content="https://stackoverflow.com/questions/tagged/sinon"/> <meta property="og:site_name" content="Stack Overflow" /> <meta property="og:image" itemprop="image primaryImageOfPage" content="https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon@2.png?v=73d79a89bded" /> <meta name="twitter:card" content="summary"/> <meta name="twitter:domain" content="stackoverflow.com"/> <meta name="twitter:title" property="og:title" itemprop="name" content="Newest 'sinon' Questions" /> <meta name="twitter:description" property="og:description" itemprop="description" content="Stack Overflow | The World’s Largest Online Community for Developers" /> <script id="webpack-public-path" type="text/uri-list">https://cdn.sstatic.net/</script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script defer src="https://cdn.sstatic.net/Js/third-party/npm/@stackoverflow/stacks/dist/js/stacks.min.js?v=90a447add688"></script> <script src="https://cdn.sstatic.net/Js/stub.en.js?v=30464efc364f"></script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?v=bd2aba62c5a4"> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary.css?v=cc49ce762956"> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/secondary.css?v=2a409df786e1"> <link rel="alternate" type="application/atom+xml" title="Newest sinon questions feed" href="/feeds/tag?tagnames=sinon&sort=newest" /> <script> StackExchange.gps.track("tagged_questions.visit", { pageUrl: "/questions/tagged" }); </script> <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/Channels/channels.css?v=5981bb1a5bd7"> <script type="application/json" data-role="module-args" data-module-name="Shared/options.mod">{"options":{"locale":"en","serverTime":1739911304,"routeName":"Questions/ListByTag","stackAuthUrl":"https://stackauth.com","networkMetaHostname":"meta.stackexchange.com","site":{"name":"Stack Overflow","description":"Q\u0026A for professional and enthusiast programmers","isNoticesTabEnabled":true,"enableNewTagCreationWarning":true,"insertSpaceAfterNameTabCompletion":false,"id":1,"cookieDomain":".stackoverflow.com","childUrl":"https://meta.stackoverflow.com","negativeVoteScoreFloor":null,"enableSocialMediaInSharePopup":true,"protocol":"https"},"user":{"fkey":"b39cb1a761f93912de068f8e6267ee5702b7d597a570755c5112354b099addd4","tid":"c1f8ae12-8a69-4055-a358-3446f59c260e","rep":0,"isAnonymous":true,"isAnonymousNetworkWide":true},"events":{"postType":{"question":1},"postEditionSection":{"title":1,"body":2,"tags":3}}}}</script> <script type="application/json" data-role="module-args" data-module-name="Shared/settings.mod">{"settings":{"image":{"maxImageUploadSizeInBytesAnimatedGif":2097152,"maxImageUploadSizeInBytes":10485760},"site":{"enableUserHovercards":true,"forceHttpsImages":true,"enableImageHttps":true,"stacksEditorPreviewEnabled":true,"allowImageUploads":true,"styleCode":true},"mentions":{"maxNumUsersInDropdown":50},"markdown":{"enableTables":true},"questionLinkTitleReplacement":{"maxReplacementsPerSite":20,"maxNumberOfSitesProcessed":10},"snippets":{"renderDomain":"stacksnippets.net","snippetsEnabled":true},"search":{},"tags":{},"questions":{"enableSavesFeature":true,"questionTitleLengthStartLiveWarningChars":50,"enableQuestionTitleLengthLiveWarning":true,"maxTitleSize":150},"legal":{"oneTrustTCFConfigId":"c3d9f1e3-55f3-4eba-b268-46cee4c6789c","useCustomConsent":false},"subscriptions":{"defaultBasicMaxTrueUpSeats":250,"defaultFreemiumMaxTrueUpSeats":50,"defaultMaxTrueUpSeats":1000},"comments":{},"flags":{"allowRetractingFlags":true,"allowRetractingCommentFlags":true},"paths":{"jQueryUICSSPath":"https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/themes/smoothness/jquery-ui.css","jQueryUIJSPath":"https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"},"userMessaging":{"showNewFeatureNotice":true},"elections":{"opaVoteResultsBaseUrl":"https://www.opavote.com/results/"},"intercom":{"appId":"inf0secd"},"accounts":{"currentPasswordRequiredForChangingStackIdPassword":true},"auth":{"oauthInPopup":true}}}</script> <script>StackExchange.init();</script> <script> StackExchange.using.setCacheBreakers({"Js/adops.en.js":"6da43f5e0a84","Js/ask.en.js":"","Js/begin-edit-event.en.js":"20edbaccceae","Js/copy-transpiled.en.js":"f48f8f039185","Js/events.en.js":"","Js/explore-qlist.en.js":"ee2a4f8c3992","Js/full-anon.en.js":"427705904ec4","Js/full.en.js":"296fbe64881a","Js/highlightjs-loader.en.js":"a3e36fe85053","Js/inline-tag-editing.en.js":"8517756a2cb6","Js/keyboard-shortcuts.en.js":"c255a5a5979b","Js/markdown-it-loader.en.js":"781aa77e9602","Js/mentions-transpiled.en.js":"bcadb48d3570","Js/moderator.en.js":"a9347e812307","Js/postCollections-transpiled.en.js":"9f7a87e8cf0d","Js/post-validation.en.js":"44d59ccfc490","Js/question-editor.en.js":"","Js/review-v2-transpiled.en.js":"c9e05881f8ab","Js/revisions.en.js":"9dd135bb585f","Js/stacks-editor.en.js":"cf77c9d2187c","Js/tageditor.en.js":"5b8f289d02ef","Js/tageditornew.en.js":"ca426894aed0","Js/tagsuggestions.en.js":"762b96a1ae1f","Js/unlimited-transpiled.en.js":"8713a979101d","Js/wmd.en.js":"eef1c2cfa021","Js/snippet-javascript-codemirror.en.js":"0f42dbb990fa"}); StackExchange.using("gps", function() { StackExchange.gps.init(false); }); </script> <noscript id="noscript-css"><style>body,.s-topbar{margin-top:1.9em}</style></noscript> </head> <body class="tagged-questions-page unified-theme"> <div id="signup-modal-container"></div> <script type="application/json" data-role="module-args" data-module-name="islands/signup-modal/index.mod">{"ContainerElementId":"signup-modal-container","FKey":"b39cb1a761f93912de068f8e6267ee5702b7d597a570755c5112354b099addd4","TriggerEvent":"signupModalShow","OauthInPopup":true,"ReturnUrl":"https://stackoverflow.com/questions/tagged/sinon","ReturnUrlForPopup":"https://stackoverflow.com/users/after-signup/oauth-only","SiteName":"Stack Overflow","SiteLogoPath":"https://cdn.sstatic.net/Sites/stackoverflow/Img/icon-48.png?v=b7e36f88ff92","AuthProviders":["Google","GitHub"],"ParentSiteUrl":"","IsInitiallyVisible":false}</script> <script defer src="https://cdn.sstatic.net/Js/webpack-chunks/svelte.en.js?v=ac1681a633a2"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/stacks-svelte.en.js?v=585200d05e44"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/8901.en.js?v=9ff34567d3a5"></script><script defer src="https://cdn.sstatic.net/Js/islands/signup-modal.en.js?v=47ec828efb46"></script> <script defer> dispatchEvent(new CustomEvent("openSignupModal")); </script> <div id="one-tap-container"></div> <script type="application/json" data-role="module-args" data-module-name="islands/one-tap/index.mod">{"ContainerElementId":"one-tap-container","FKey":"b39cb1a761f93912de068f8e6267ee5702b7d597a570755c5112354b099addd4","GoogleClientId":"717762328687-iludtf96g1hinl76e4lc1b9a82g457nn.apps.googleusercontent.com","Autoselect":false,"ReturnUrl":"https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon"}</script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/svelte.en.js?v=ac1681a633a2"></script><script defer src="https://cdn.sstatic.net/Js/islands/one-tap.en.js?v=bc67e8c0f01e"></script> <div id="notify-container"></div> <div id="custom-header"></div> <header class="s-topbar ps-fixed t0 l0 js-top-bar"> <a href="#content" class="s-topbar--skip-link">Skip to main content</a> <div class="s-topbar--container"> <a href="#" class="s-topbar--menu-btn js-left-sidebar-toggle" role="menuitem" aria-haspopup="true" aria-controls="left-sidebar" aria-expanded="false"><span></span></a> <div class="topbar-dialog leftnav-dialog js-leftnav-dialog dno"> <div class="left-sidebar js-unpinned-left-sidebar" data-can-be="left-sidebar" data-is-here-when="sm"></div> </div> <a href="https://stackoverflow.com" class="s-topbar--logo js-gps-track" data-gps-track="top_nav.click({is_current:false, location:5, destination:8}); homelogo_nav.click({location:5})"> <span class="-img _glyph">Stack Overflow</span> </a> <ol class="s-navigation fw-nowrap" role="presentation"> <li class="md:d-none"> <a href="https://stackoverflow.co/" class="s-navigation--item js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:7})" data-ga="["top navigation","about menu click",null,null,null]">About</a> </li> <li> <button class="s-navigation--item js-gps-track" type="button" aria-controls="products-popover" aria-expanded="false" data-controller="s-popover" data-action="s-popover#toggle" data-s-popover-toggle-class="is-selected" data-gps-track="top_nav.products.click({location:5, destination:1})" data-ga="["top navigation","products menu click",null,null,null]"> Products </button> </li> <li class="md:d-none"> <a href="https://stackoverflow.co/teams/ai/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav-bar&utm_content=overflowai" class="s-navigation--item js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:10})" data-ga="["top navigation","learn more - overflowai",null,null,null]">OverflowAI</a> </li> </ol> <div class="s-popover ws2 mtn2 p0" id="products-popover" role="menu" aria-hidden="true"> <div class="s-popover--arrow"></div> <ol class="list-reset s-anchors s-anchors__inherit"> <li class="m6"> <a href="https://stackoverflow.co/teams/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=stack-overflow-for-teams" class="bar-sm p6 d-block h:bg-black-225 js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:3})" data-ga="["top navigation","teams submenu click",null,null,null]"> <span class="fs-body1 d-block">Stack Overflow for Teams</span> <span class="fs-caption d-block fc-black-400">Where developers & technologists share private knowledge with coworkers</span> </a> </li> <li class="m6"> <a href="https://stackoverflow.co/advertising/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=stack-overflow-advertising" class="bar-sm p6 d-block h:bg-black-225 js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:6})" data-ga="["top navigation","advertising submenu click",null,null,null]"> <span class="fs-body1 d-block">Advertising & Talent</span> <span class="fs-caption d-block fc-black-400">Reach devs & technologists worldwide about your product, service or employer brand</span> </a> </li> <li class="bt bc-black-200 pt6 px6 bbr-md"> <a href="https://stackoverflow.co/teams/ai/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=overflow-ai" class="bar-sm p6 d-block h:bg-black-225 js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:10})" data-ga="["top navigation","overflowai submenu click",null,null,null]"> <span class="fs-body1 d-block">OverflowAI</span> <span class="fs-caption d-block fc-black-400">GenAI features for Teams</span> </a> </li> <li class="pb6 px6 bbr-md"> <a href="https://stackoverflow.co/api-solutions/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=overflow-api" class="bar-sm p6 d-block h:bg-black-225 js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:11})" data-ga="["top navigation","overflowapi submenu click",null,null,null]"> <span class="fs-body1 d-block">OverflowAPI</span> <span class="fs-caption d-block fc-black-400">Train & fine-tune LLMs</span> </a> </li> <li class="bt bc-black-200 py6 px6 bbr-md"> <a href="https://stackoverflow.co/labs/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=labs" class="bar-sm p6 d-block h:bg-black-225 js-gps-track" data-gps-track="top_nav.products.click({location:5, destination:12})" data-ga="["top navigation","labs submenu click",null,null,null]"> <span class="fs-body1 d-block">Labs</span> <span class="fs-caption d-block fc-black-400">The future of collective knowledge sharing</span> </a> </li> <li class="bg-black-100 bt bc-black-200 py6 px6 bbr-md"> <a href="https://stackoverflow.co/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=about-the-company" class="fc-black-400 d-block py6 px6 h:fc-black-600" data-ga="["top navigation","about submenu click",null,null,null]">About the company</a> <a href="https://stackoverflow.blog/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=top-nav&utm_content=blog" class="fc-black-400 d-block py6 px6 h:fc-black-600" data-ga="["top navigation","blog submenu click",null,null,null]">Visit the blog</a> </li> </ol> </div> <form id="search" role="search" action=/search class="s-topbar--searchbar js-searchbar " autocomplete="off"> <div class="s-topbar--searchbar--input-group"> <input name="q" type="text" role="combobox" placeholder="Search…" value="[sinon]" autocomplete="off" maxlength="240" class="s-input s-input__search js-search-field wmn1 " aria-label="Search" aria-controls="top-search" data-controller="s-popover" data-action="focus->s-popover#show" data-s-popover-placement="bottom-start" /> <svg aria-hidden="true" class="s-input-icon s-input-icon__search svg-icon iconSearch" width="18" height="18" viewBox="0 0 18 18"><path d="m18 16.5-5.14-5.18h-.35a7 7 0 1 0-1.19 1.19v.35L16.5 18zM12 7A5 5 0 1 1 2 7a5 5 0 0 1 10 0"/></svg> <div class="s-popover p0 wmx100 wmn4 sm:wmn-initial js-top-search-popover" id="top-search" role="menu"> <div class="s-popover--arrow"></div> <div class="s-popover--content"> <div class="js-spinner p24 d-flex ai-center jc-center d-none"> <div class="s-spinner s-spinner__sm fc-orange-400"> <div class="v-visible-sr">Loading…</div> </div> </div> <span class="v-visible-sr js-screen-reader-info"></span> <div class="js-ac-results overflow-y-auto hmx3 d-none"></div> <div class="js-search-hints" aria-describedby="Tips for searching"></div> </div> </div> </div> </form> <nav class="h100 ml-auto overflow-x-auto pr12" aria-label="Topbar"> <ol class="s-topbar--content" role="menubar"> <li class="js-topbar-dialog-corral" role="presentation"> <div class="topbar-dialog siteSwitcher-dialog dno" role="menu"> <div class="header fw-wrap"> <h3 class="flex--item"> <a href="https://stackoverflow.com">current community</a> </h3> <div class="flex--item fl1"> <div class="ai-center d-flex jc-end"> <button class="js-close-button s-btn s-btn__muted p0 ml8 d-none sm:d-block" type="button" aria-label="Close" > <svg aria-hidden="true" class="svg-icon iconClear" width="18" height="18" viewBox="0 0 18 18"><path d="M15 4.41 13.59 3 9 7.59 4.41 3 3 4.41 7.59 9 3 13.59 4.41 15 9 10.41 13.59 15 15 13.59 10.41 9z"/></svg> </button> </div> </div> </div> <div class="modal-content bg-blue-200 current-site-container"> <ul class="current-site"> <li class="d-flex"> <div class="fl1"> <a href="https://stackoverflow.com" class="current-site-link d-flex gx8 site-link js-gps-track" data-id="1" data-gps-track="site_switcher.click({ item_type:3 })"> <div class="favicon favicon-stackoverflow site-icon flex--item" title="Stack Overflow"></div> <span class="flex--item fl1"> Stack Overflow </span> </a> </div> <div class="related-links"> <a href="https://stackoverflow.com/help" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:14 })">help</a> <a href="https://chat.stackoverflow.com/?tab=site&host=stackoverflow.com" class="js-gps-track" data-gps-track="site_switcher.click({ item_type:6 })">chat</a> </div> </li> <li class="related-site d-flex"> <div class="L-shaped-icon-container"> <span class="L-shaped-icon"></span> </div> <a href="https://meta.stackoverflow.com" class="s-block-link px16 d-flex gx8 site-link js-gps-track" data-id="552" data-gps-track="site.switch({ target_site:552, item_type:3 }),site_switcher.click({ item_type:4 })"> <div class="favicon favicon-stackoverflowmeta site-icon flex--item" title="Meta Stack Overflow"></div> <span class="flex--item fl1"> Meta Stack Overflow </span> </a> </li> </ul> </div> <div class="header" id="your-communities-header"> <h3> your communities </h3> </div> <div class="modal-content" id="your-communities-section"> <div class="call-to-login"> <a href="https://stackoverflow.com/users/signup?ssrc=site_switcher&returnurl=https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon" class="login-link js-gps-track" data-gps-track="site_switcher.click({ item_type:10 })">Sign up</a> or <a href="https://stackoverflow.com/users/login?ssrc=site_switcher&returnurl=https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon" class="login-link js-gps-track" data-gps-track="site_switcher.click({ item_type:11 })">log in</a> to customize your list. </div> </div> <div class="header"> <h3><a href="https://stackexchange.com/sites">more stack exchange communities</a> </h3> <a href="https://stackoverflow.blog" class="float-right">company blog</a> </div> <div class="modal-content"> <div class="child-content"></div> </div> </div> </li> <li role="none"><button class="s-topbar--item s-btn s-btn__icon s-btn__muted d-none sm:d-inline-flex js-searchbar-trigger" role="menuitem" aria-label="Search" aria-haspopup="true" aria-controls="search" title="Click to show search"><svg aria-hidden="true" class="svg-icon iconSearch" width="18" height="18" viewBox="0 0 18 18"><path d="m18 16.5-5.14-5.18h-.35a7 7 0 1 0-1.19 1.19v.35L16.5 18zM12 7A5 5 0 1 1 2 7a5 5 0 0 1 10 0"/></svg></button></li> <li role="none"> <a href="https://stackoverflow.com/users/login?ssrc=head&returnurl=https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon" class="s-topbar--item s-topbar--item__unset s-btn s-btn__outlined ws-nowrap js-gps-track" role="menuitem" rel="nofollow" data-gps-track="login.click" data-ga="["top navigation","login button click",null,null,null]">Log in</a> </li> <li role="none"><a href="https://stackoverflow.com/users/signup?ssrc=head&returnurl=https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon" class="s-topbar--item s-topbar--item__unset ml4 s-btn s-btn__filled ws-nowrap js-signup-button js-gps-track" role="menuitem" rel="nofollow" data-gps-track="signup.topbar.click" data-ga="["sign up","Sign Up Navigation","Header",null,null]">Sign up</a></li> </ol> </nav> </div> </header> <script> StackExchange.ready(function () { StackExchange.topbar.init(); }); StackExchange.scrollPadding.setPaddingTop(50, 10); </script> <div class="container"> <div id="homepage-wizard-container"></div> <script type="application/json" data-role="module-args" data-module-name="islands/homepage-wizard/index.mod">{"ContainerElementId":"homepage-wizard-container","FKey":"b39cb1a761f93912de068f8e6267ee5702b7d597a570755c5112354b099addd4","Tags":["javascript","python","java","c#","php","android","html","jquery","c++","css","ios","sql","mysql","r","reactjs","node.js","arrays","c","asp.net","json","python-3.x",".net","ruby-on-rails","sql-server","swift","django","angular","objective-c","excel","pandas","angularjs","regex","typescript","ruby","linux","ajax","iphone","vba","xml","laravel","spring","asp.net-mvc","database","wordpress","string","flutter","postgresql","mongodb","wpf","windows","amazon-web-services","xcode","bash","git","oracle-database","spring-boot","dataframe","azure","firebase","list","multithreading","docker","vb.net","react-native","eclipse","algorithm","powershell","macos","visual-studio","numpy","image","forms","scala","function","vue.js","performance","twitter-bootstrap","selenium","winforms","kotlin","loops","express","dart","hibernate","sqlite","matlab","python-2.7","shell","rest","apache","entity-framework","android-studio","csv","api","maven","linq","qt","dictionary","unit-testing","facebook","asp.net-core","tensorflow","apache-spark","file","swing","class","unity-game-engine","sorting","date","authentication","go","symfony","opencv","t-sql","matplotlib",".htaccess","google-chrome","for-loop","datetime","codeigniter","http","perl","validation","sockets","google-maps","object","uitableview","xaml","oop","if-statement","visual-studio-code","cordova","ubuntu","web-services","email","android-layout","github","elasticsearch","spring-mvc","kubernetes","selenium-webdriver","ms-access","user-interface","parsing","ggplot2","pointers","machine-learning","c++11","security","google-sheets","flask","google-apps-script","ruby-on-rails-3","nginx","templates","variables","exception","sql-server-2008","gradle","debugging","tkinter","listview","delphi","jpa","asynchronous","pdf","web-scraping","haskell","jsp","ssl","amazon-s3","google-cloud-platform","jenkins","testing","xamarin","wcf","npm","batch-file","generics","ionic-framework","network-programming","unix","recursion","google-app-engine","mongoose","visual-studio-2010",".net-core","android-fragments","assembly","animation","math","next.js","session","svg","hadoop","intellij-idea","curl","django-models","join","laravel-5","winapi","rust","url","heroku","http-redirect","tomcat","google-cloud-firestore","inheritance","webpack","keras","image-processing","asp.net-mvc-4","gcc","web","logging","dom","swiftui","matrix","pyspark","actionscript-3","button","post","firebase-realtime-database","optimization","jquery-ui","iis","cocoa","xpath","d3.js","firefox","javafx","internet-explorer","xslt","caching","select","asp.net-mvc-3","opengl","events","asp.net-web-api","plot","dplyr","magento","encryption","search","stored-procedures","amazon-ec2","ruby-on-rails-4","memory","audio","canvas","multidimensional-array","jsf","random","cookies","vector","redux","facebook-graph-api","input","flash","xamarin.forms","indexing","arraylist","ipad","cocoa-touch","data-structures","video","apache-kafka","model-view-controller","serialization","jdbc","woocommerce","routes","razor","awk","azure-devops","servlets","mod-rewrite","beautifulsoup","docker-compose","iframe","filter","excel-formula","aws-lambda","design-patterns","text","django-rest-framework","visual-c++","cakephp","mobile","android-intent","react-hooks","struct","methods","groovy","mvvm","ssh","lambda","checkbox","google-chrome-extension","ecmascript-6","time","installation","grails","sharepoint","cmake","spring-security","shiny","jakarta-ee","android-recyclerview","plsql","core-data","types","meteor","android-activity","sed","websocket","bootstrap-4","activerecord","graph","replace","scikit-learn","file-upload","group-by","vim","junit","deep-learning","boost","import","sass","memory-management","error-handling","async-await","eloquent","dynamic","soap","silverlight","dependency-injection","charts","layout","apache-spark-sql","deployment","browser","gridview","svn","while-loop","google-bigquery","vuejs2","ffmpeg","dll","highcharts","view","foreach","plugins","c#-4.0","makefile","redis","reporting-services","jupyter-notebook","server","merge","https","unicode","reflection","google-maps-api-3","twitter","oauth-2.0","extjs","pytorch","axios","terminal","pip","split","mysqli","cmd","django-views","encoding","automation","database-design","netbeans","collections","hash","build","data-binding","ember.js","tcp","sqlalchemy","pdo","apache-flex","concurrency","command-line","spring-data-jpa","entity-framework-core","printing","java-8","react-redux","jestjs","service","html-table","neo4j","ansible","lua","parameters","material-ui","module","visual-studio-2012","enums","promise","flexbox","outlook","webview","firebase-authentication","web-applications","uwp","jquery-mobile","utf-8","datatable","python-requests","parallel-processing","drop-down-menu","colors","scroll","hive","tfs","scipy","count","syntax","ms-word","twitter-bootstrap-3","ssis","google-analytics","three.js","fonts","graphql","constructor","powerbi","rxjs","file-io","paypal","discord","cassandra","socket.io","graphics","compiler-errors","gwt","react-router","nlp","solr","backbone.js","url-rewriting","datatables","memory-leaks","datagridview","oauth","drupal","terraform","oracle11g","zend-framework","neural-network","knockout.js","django-forms","triggers","interface","google-api","angular-material","casting","jmeter","linked-list","proxy","path","timer","django-templates","arduino","orm","directory","parse-platform","cron","visual-studio-2015","windows-phone-7","push-notification","conditional-statements","primefaces","functional-programming","pagination","model","jar","xamarin.android","hyperlink","uiview","visual-studio-2013","gitlab","vbscript","google-cloud-functions","azure-active-directory","jwt","download","swift3","sql-server-2005","process","configuration","rspec","properties","pygame","combobox","callback","windows-phone-8","safari","linux-kernel","permissions","scrapy","raspberry-pi","scripting","emacs","clojure","scope","io","x86","compilation","responsive-design","mongodb-query","nhibernate","angularjs-directive","request","expo","bluetooth","3d","dns","binding","reference","azure-functions","discord.js","architecture","playframework","pyqt","version-control","doctrine-orm","package","pycharm","get","sql-server-2012","rubygems","f#","autocomplete","datepicker","openssl","kendo-ui","tree","jackson","controller","yii","nested","grep","xamarin.ios","static","statistics","dockerfile","transactions","null","datagrid","active-directory","uiviewcontroller","phpmyadmin","webforms","discord.py","notifications","computer-vision","sas","duplicates","mocking","youtube","nullpointerexception","yaml","menu","sum","bitmap","electron","asp.net-mvc-5","visual-studio-2008","time-series","yii2","jsf-2","css-selectors","android-listview","stl","floating-point","blazor","cryptography","ant","stream","hashmap","character-encoding","msbuild","sdk","asp.net-core-mvc","google-drive-api","selenium-chromedriver","jboss","joomla","navigation","cors","devise","anaconda","frontend","background","camera","pyqt5","multiprocessing","binary","cuda","linq-to-sql","iterator","mariadb","onclick","ios7","plotly","rabbitmq","android-asynctask","android-jetpack-compose","microsoft-graph-api","tabs","laravel-4","insert","amazon-dynamodb","uicollectionview","environment-variables","linker","console","xsd","coldfusion","upload","continuous-integration","ftp","textview","opengl-es","operating-system","mockito","localization","vuejs3","xml-parsing","macros","formatting","json.net","kivy","type-conversion","data.table","timestamp","calendar","integer","segmentation-fault","android-ndk","drag-and-drop","prolog","char","crash","jasmine","automated-tests","dependencies","geometry","android-gradle-plugin","itext","firebase-cloud-messaging","header","sprite-kit","mfc","fortran","attributes","nosql","nuxt.js","format","nestjs","azure-pipelines","odoo","jquery-plugins","db2","leaflet","jenkins-pipeline","event-handling","postman","flutter-layout","annotations","julia","keyboard","textbox","arm","visual-studio-2017","gulp","libgdx","stripe-payments","xampp","synchronization","crystal-reports","timezone","azure-web-app-service","dom-events","android-emulator","swagger","uikit","wso2","sequelize.js","aggregation-framework","namespaces","uiscrollview","jvm","chart.js","com","google-sheets-formula","subprocess","geolocation","centos","webdriver","html5-canvas","widget","dialog","garbage-collection","numbers","concatenation","snowflake-cloud-data-platform","sql-update","qml","windows-10","set","mapreduce","smtp","tuples","ionic2","java-stream","rotation","modal-dialog","android-edittext","spring-data","http-headers","radio-button","doctrine","nuget","grid","sonarqube","lucene","xmlhttprequest","internationalization","listbox","components","initialization","switch-statement","google-play","boolean","apache-camel","serial-port","ldap","ios5","youtube-api","return","gdb","pivot","latex","eclipse-plugin","frameworks","tags","containers","dataset","github-actions","asp-classic","foreign-keys","subquery","label","copy","uinavigationcontroller","google-cloud-storage","delegates","c++17","struts2","migration","base64","protractor","sql-server-2008-r2","queue","find","uibutton","embedded","arguments","append","composer-php","jaxb","zip","stack","cucumber","autolayout","ide","popup","entity-framework-6","iteration","windows-7","airflow","r-markdown","ssl-certificate","vb6","gmail","jqgrid","hover","udp","g++","tailwind-css"],"TriggerEvent":"homepageWizardShow","OauthInPopup":true,"ReturnUrl":"https://stackoverflow.com","ReturnUrlForPopup":"https://stackoverflow.com/users/after-signup/oauth-only","ThemePreferenceFlags":0}</script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/svelte.en.js?v=ac1681a633a2"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/stacks-svelte.en.js?v=585200d05e44"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/2784.en.js?v=414ac3934ec2"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/8901.en.js?v=9ff34567d3a5"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/6719.en.js?v=5cd743a95ced"></script><script defer src="https://cdn.sstatic.net/Js/islands/homepage-wizard.en.js?v=1dc402690a54"></script> <div id="left-sidebar" data-is-here-when="md lg" class="left-sidebar js-pinned-left-sidebar ps-relative"> <div class="left-sidebar--sticky-container js-sticky-leftnav"> <nav aria-label="Primary"> <ol class="nav-links"> <li> <ol class="nav-links"> <li class="ps-relative" aria-current="false"> <a href="/" class="s-block-link pl8 js-homepage-wizard-link js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: false, location:5, destination:8, has_activity_notification:False});home_nav.click({location:5})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="svg-icon iconHome" width="18" height="18" viewBox="0 0 18 18"><path d="M15 10v5a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-5H0l9-9 9 9zm-8 1v6h4v-6z"/></svg> <span class="-link--channel-name pl6">Home</span> </div> </a> </li> <li class="ps-relative youarehere" aria-current="true"> <a id="nav-questions" href="/questions" class="s-block-link pl8 js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: true, location:5, destination:1, has_activity_notification:False})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="svg-icon iconQuestion" width="18" height="18" viewBox="0 0 18 18"><path d="m4 15-3 3V4c0-1.1.9-2 2-2h12c1.09 0 2 .91 2 2v9c0 1.09-.91 2-2 2zm7.75-3.97c.72-.83.98-1.86.98-2.94 0-1.65-.7-3.22-2.3-3.83a4.4 4.4 0 0 0-3.02 0 3.8 3.8 0 0 0-2.32 3.83q0 1.93 1.03 3a3.8 3.8 0 0 0 2.85 1.07q.94 0 1.71-.34.97.66 1.06.7.34.2.7.3l.59-1.13a5 5 0 0 1-1.28-.66m-1.27-.9a5 5 0 0 0-1.5-.8l-.45.9q.5.18.98.5-.3.1-.65.11-.92 0-1.52-.68c-.86-1-.86-3.12 0-4.11.8-.9 2.35-.9 3.15 0 .9 1.01.86 3.03-.01 4.08"/></svg> <span class="-link--channel-name pl6">Questions</span> </div> </a> </li> <li class="ps-relative" aria-current="false"> <a href="/tags" class="s-block-link pl8 js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: false, location:5, destination:2, has_activity_notification:False})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="svg-icon iconTags" width="18" height="18" viewBox="0 0 18 18"><path d="M9.24 1a3 3 0 0 0-2.12.88l-5.7 5.7a2 2 0 0 0-.38 2.31 3 3 0 0 1 .67-1.01l6-6A3 3 0 0 1 9.83 2H14a3 3 0 0 1 .79.1A2 2 0 0 0 13 1z" opacity=".4"/><path d="M9.83 3a2 2 0 0 0-1.42.59l-6 6a2 2 0 0 0 0 2.82L6.6 16.6a2 2 0 0 0 2.82 0l6-6A2 2 0 0 0 16 9.17V5a2 2 0 0 0-2-2zM12 9a2 2 0 1 1 0-4 2 2 0 0 1 0 4"/></svg> <span class="-link--channel-name pl6">Tags</span> </div> </a> </li> <li class="pb24"></li> <li class="ps-relative" aria-current="false"> <a id="nav-users" href="/users" class="s-block-link pl8 js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: false, location:5, destination:3, has_activity_notification:False})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="svg-icon iconPeople" width="18" height="18" viewBox="0 0 18 18"><path d="M17 14c0 .44-.45 1-1 1H9a1 1 0 0 1-1-1H2c-.54 0-1-.56-1-1 0-2.63 3-4 3-4s.23-.4 0-1c-.84-.62-1.06-.59-1-3s1.37-3 2.5-3 2.44.58 2.5 3-.16 2.38-1 3c-.23.59 0 1 0 1s1.55.71 2.42 2.09c.78-.72 1.58-1.1 1.58-1.1s.23-.4 0-1c-.84-.61-1.06-.58-1-3s1.37-3 2.5-3 2.44.59 2.5 3c.05 2.42-.16 2.39-1 3-.23.6 0 1 0 1s3 1.38 3 4"/></svg> <span class="-link--channel-name pl6">Users</span> </div> </a> </li> <li class="ps-relative" aria-current="false"> <a id="nav-companies" href="https://stackoverflow.com/jobs/companies?so_medium=stackoverflow&so_source=SiteNav" class="s-block-link pl8 js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: false, location:5, destination:12, has_activity_notification:False})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="svg-icon iconIndustry" width="18" height="18" viewBox="0 0 18 18"><path d="M10 16v-4H8v4H2V4c0-1.1.9-2 2-2h6c1.09 0 2 .91 2 2v2h2c1.09 0 2 .91 2 2v8zM4 4v2h2V4zm0 4v2h2V8zm4-4v2h2V4zm0 4v2h2V8zm-4 4v2h2v-2zm8 0v2h2v-2zm0-4v2h2V8z"/></svg> <span class="-link--channel-name pl6">Companies</span> </div> </a> </li> <li class="ml8 mt32 mb8"> <a href="javascript:void(0)" class="s-link s-link d-flex fl-grow1 fc-black-400 h:fc-black-600 fs-fine" role="button" aria-controls="popover-labs-left-nav" data-controller="s-popover" data-action="s-popover#toggle" data-s-popover-placement="top" data-s-popover-toggle-class="is-selected" > <div class="flex--item fl-grow1 tt-uppercase fc-black-600 fw-bold">Labs</div> <div class="flex--item px12"> <svg aria-hidden="true" class="svg-icon iconInfoSm" width="14" height="14" viewBox="0 0 14 14"><path d="M7 1a6 6 0 1 1 0 12A6 6 0 0 1 7 1m1 10V6H6v5zm0-6V3H6v2z"/></svg> </div> </a> </li> <li class="ps-relative" aria-current="false"> <a id="nav-labs-discussions" href="/beta/discussions" class="s-block-link pl8 ai-center js-gps-track nav-links--link -link__with-icon" data-gps-track="top_nav.click({is_current: false, location:5, destination:24, has_activity_notification:False})" aria-controls="" data-controller=" " data-s-popover-placement="right" aria-current="false" data-s-popover-auto-show="true" data-s-popover-hide-on-outside-click="never" > <div class="d-flex ai-center"> <svg aria-hidden="true" class="w16 svg-icon iconMessage" width="18" height="18" viewBox="0 0 18 18"><path d="M5 7a1 1 0 0 1 1-1h6a1 1 0 1 1 0 2H6a1 1 0 0 1-1-1m1 2a1 1 0 1 0 0 2h4a1 1 0 1 0 0-2zm-5 9V4c0-1.1.9-2 2-2h12c1.09 0 2 .91 2 2v9c0 1.09-.91 2-2 2H4.5zm2.76-5h11.23v-.01H15V4H3v9.65z"/></svg> <span class="-link--channel-name pl6">Discussions</span> </div> </a> </li> <li class="ml8 mt32 mb4"> <div class="d-flex jc-space-between ai-center"> <a class="s-link d-flex fl-grow1 fc-black-400 h:fc-black-600 fs-fine" href="javascript:void(0)" role="button" aria-controls="popover-discover-collectives" data-controller="s-popover" data-action="s-popover#toggle" data-s-popover-placement="top" data-s-popover-toggle-class="is-selected" data-gps-track="top_nav.click({is_current:false, location:5, destination:17})" > <div class="flex--item fl-grow1 tt-uppercase fc-black-600 fw-bold">Collectives</div> <div class="flex--item px12 js-collectives-navcta-toggle"> <svg aria-hidden="true" class="svg-icon iconPlusSm" width="14" height="14" viewBox="0 0 14 14"><path d="M8 2H6v4H2v2h4v4h2V8h4V6H8z"/></svg> </div> </a> </div> </li> <li class="ps-relative js-collectives-navcta-toggle"> <p class="fs-fine pr8 pl8 pt4 fc-black-400"> Communities for your favorite technologies. <a href="/collectives-all" class="s-link s-link__grayscale s-link__underlined fw-bold">Explore all Collectives</a> </p> </li> </ol> </li> <li class="js-freemium-cta ps-relative mt32 mb8"> <div class="fs-fine tt-uppercase fc-black-600 fw-bold ml8 mt16 mb8">Teams</div> <div class="px12 pt12 pb4 mb12 fc-medium overflow-hidden"> <img class="wmx100 mx-auto mb12 h-auto d-block" width="151" height="24" src="https://cdn.sstatic.net/Img/teams/teams-promo.svg?v=e507948b81bf" alt=""> <p class="fs-fine"> Ask questions, find answers and collaborate at work with Stack Overflow for Teams. </p> <a href="https://stackoverflowteams.com/teams/create/free/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=side-bar&utm_content=explore-teams" class="w100 s-btn s-btn__filled s-btn__xs bg-orange-400 h:bg-orange-500 js-gps-track pt8 pr7 pb6 pl7" data-gps-track="teams.create.left-sidenav.click({ Action: 6 })" data-ga="["teams left navigation - anonymous","left nav free cta","stackoverflow.com/teams/create/free",null,null]">Try Teams for free</a> <a href="https://stackoverflow.co/teams/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=side-bar&utm_content=explore-teams" class="w100 s-btn s-btn__muted s-btn__xs mt1 js-gps-track" data-gps-track="teams.create.left-sidenav.click({ Action: 5 })" data-ga="["teams left navigation - anonymous","left nav free cta","stackoverflow.com/teams",null,null]">Explore Teams</a> </div> </li> <li class="d-flex ai-center jc-space-between ml8 mt32 mb8 js-create-team-cta d-none"> <a href="javascript:void(0)" class="s-link d-flex fl-grow1 fc-black-400 h:fc-black-600 fs-fine js-gps-track" role="button" aria-controls="popover-teams-create-cta" data-controller="s-popover" data-action="s-popover#toggle" data-s-popover-placement="bottom-start" data-s-popover-toggle-class="is-selected" data-gps-track="teams.create.left-sidenav.click({ Action: ShowInfo })" data-ga="["teams left navigation - anonymous","left nav show teams info",null,null,null]" > <div class="flex--item fl-grow1 fc-black-600 fw-bold tt-uppercase">Teams</div> <div class="flex--item px12"> <svg aria-hidden="true" class="svg-icon iconPlusSm" width="14" height="14" viewBox="0 0 14 14"><path d="M8 2H6v4H2v2h4v4h2V8h4V6H8z"/></svg> </div> </a> </li> <li class="ps-relative js-create-team-cta d-none"> <p class="fs-fine pr8 pl8 pb4 fc-black-400"> Ask questions, find answers and collaborate at work with Stack Overflow for Teams. <a href="https://stackoverflow.co/teams/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=side-bar&utm_content=explore-teams-compact" class="s-link s-link__grayscale s-link__underlined fw-bold">Explore Teams</a> </p> </li> </ol> </nav> </div> <div class="s-popover ws2" id="popover-discover-collectives" role="menu"> <div class="s-popover--arrow"></div> <div> <svg aria-hidden="true" class="fc-orange-400 float-right ml24 svg-spot spotCollective" width="48" height="48" viewBox="0 0 48 48"><path d="M25.5 7a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5M14 18.25c0-.69.56-1.25 1.25-1.25h22.5c.69 0 1.25.56 1.25 1.25V37.5a1 1 0 0 1-1.6.8l-4.07-3.05a1.3 1.3 0 0 0-.75-.25H15.25c-.69 0-1.25-.56-1.25-1.25zM7 24.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0M25.5 48a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5M48 24.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0" opacity=".2"/><path d="M21 3.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0M24.5 2a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3M0 23.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0M3.5 22a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3M21 44.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0m3.5-1.5a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3m20-23a3.5 3.5 0 1 0 0 7 3.5 3.5 0 0 0 0-7M43 23.5a1.5 1.5 0 1 1 3 0 1.5 1.5 0 0 1-3 0m-23.23-3.14a1 1 0 0 1-.13 1.4l-2.08 1.74 2.08 1.73a1 1 0 1 1-1.28 1.54l-2.42-2.02a1.63 1.63 0 0 1 0-2.5l2.42-2.02a1 1 0 0 1 1.4.13m7.6 1.41a1 1 0 1 1 1.28-1.54l2.42 2.02c.78.65.78 1.85 0 2.5l-2.42 2.02a1 1 0 1 1-1.28-1.54l2.08-1.73zM24.12 18a1 1 0 0 1 .87 1.12l-1 8a1 1 0 1 1-1.98-.24l1-8a1 1 0 0 1 1.11-.87M12.25 13C11.01 13 10 14 10 15.25v15.5c0 1.24 1 2.25 2.25 2.25h17.33q.09 0 .15.05l4.07 3.05a2 2 0 0 0 3.2-1.6V15.25c0-1.24-1-2.25-2.25-2.25zM12 15.25q.02-.23.25-.25h22.5q.23.02.25.25V34.5l-4.07-3.05q-.6-.45-1.35-.45H12.25a.25.25 0 0 1-.25-.25zm7.24-10.68a1 1 0 1 0-.48-1.94A22 22 0 0 0 2.91 17.7a1 1 0 1 0 1.92.58 20 20 0 0 1 14.4-13.72m11.06-1.65a1 1 0 0 0-.58 1.92c6.45 1.92 11.54 7 13.46 13.46a1 1 0 1 0 1.92-.58 22 22 0 0 0-14.8-14.8M4.57 28.76a1 1 0 0 0-1.94.48 22 22 0 0 0 16.13 16.13 1 1 0 1 0 .48-1.94A20 20 0 0 1 4.57 28.76m40.8.48a1 1 0 1 0-1.94-.48 20 20 0 0 1-13.72 14.41 1 1 0 0 0 .58 1.92 22 22 0 0 0 15.08-15.85"/></svg> <h5 class="pt4 fw-bold">Collectives™ on Stack Overflow</h5> <p class="my16 fs-caption fc-black-500">Find centralized, trusted content and collaborate around the technologies you use most.</p> <a href="/collectives" class="js-gps-track s-btn s-btn__filled s-btn__xs" data-gps-track="top_nav.click({is_current:false, location:5, destination:18})"> Learn more about Collectives </a> </div> </div> <div class="s-popover ws2" id="popover-teams-create-cta" role="menu" aria-hidden="true"> <div class="s-popover--arrow"></div> <div class="ps-relative overflow-hidden"> <p class="mb2"><strong>Teams</strong></p> <p class="mb12 fs-caption fc-black-400">Q&A for work</p> <p class="mb12 fs-caption fc-black-500">Connect and share knowledge within a single location that is structured and easy to search.</p> <a href="https://stackoverflow.co/teams/" class="js-gps-track s-btn s-btn__filled s-btn__xs" data-gps-track="teams.create.left-sidenav.click({ Action: CtaClick })" data-ga="["teams left navigation - anonymous","left nav cta","stackoverflow.com/teams",null,null]"> Learn more about Teams </a> </div> <div class="ps-absolute t8 r8"> <svg aria-hidden="true" class="fc-orange-400 svg-spot spotPeople" width="48" height="48" viewBox="0 0 48 48"><path d="M13.5 28a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9M7 30a1 1 0 0 1 1-1h11a1 1 0 0 1 1 1v5h11v-5a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v10a2 2 0 0 1-2 2H33v5a1 1 0 0 1-1 1H20a1 1 0 0 1-1-1v-5H8a1 1 0 0 1-1-1zm25-6.5a4.5 4.5 0 1 0 9 0 4.5 4.5 0 0 0-9 0M24.5 34a4.5 4.5 0 1 0 0-9 4.5 4.5 0 0 0 0 9" opacity=".2"/><path d="M16.4 26.08A6 6 0 1 0 7.53 26C5.64 26.06 4 27.52 4 29.45V40a1 1 0 0 0 1 1h9a1 1 0 1 0 0-2h-4v-7a1 1 0 1 0-2 0v7H6v-9.55c0-.73.67-1.45 1.64-1.45H16a1 1 0 0 0 .4-1.92M12 18a4 4 0 1 1 0 8 4 4 0 0 1 0-8m16.47 14a6 6 0 1 0-8.94 0A3.6 3.6 0 0 0 16 35.5V46a1 1 0 0 0 1 1h14a1 1 0 0 0 1-1V35.5c0-1.94-1.64-3.42-3.53-3.5M20 28a4 4 0 1 1 8 0 4 4 0 0 1-8 0m-.3 6h8.6c1 0 1.7.75 1.7 1.5V45h-2v-7a1 1 0 1 0-2 0v7h-4v-7a1 1 0 1 0-2 0v7h-2v-9.5c0-.75.7-1.5 1.7-1.5M42 22c0 1.54-.58 2.94-1.53 4A3.5 3.5 0 0 1 44 29.45V40a1 1 0 0 1-1 1h-9a1 1 0 1 1 0-2h4v-7a1 1 0 1 1 2 0v7h2v-9.55A1.5 1.5 0 0 0 40.48 28H32a1 1 0 0 1-.4-1.92A6 6 0 1 1 42 22m-2 0a4 4 0 1 0-8 0 4 4 0 0 0 8 0"/><g opacity=".35"><path d="M17 10a1 1 0 011-1h12a1 1 0 110 2H18a1 1 0 01-1-1m1-5a1 1 0 100 2h12a1 1 0 100-2zM14 1a1 1 0 00-1 1v12a1 1 0 001 1h5.09l4.2 4.2a1 1 0 001.46-.04l3.7-4.16H34a1 1 0 001-1V2a1 1 0 00-1-1zm1 12V3h18v10h-5a1 1 0 00-.75.34l-3.3 3.7-3.74-3.75a1 1 0 00-.71-.29z"/></g></svg> </div> </div> <div class="s-popover ws2" id="popover-labs-left-nav" role="menu" aria-hidden="true"> <div class="s-popover--arrow"></div> <svg aria-hidden="true" class="fc-black-600 mb8 svg-icon iconLabsAltSm" width="42" height="18" viewBox="0 0 42 18"><path fill="var(--black-600)" d="M11.5 13.62c0 .21-.17.38-.37.38H5.36a.37.37 0 0 1-.37-.38V4.38c0-.21.17-.38.37-.38h1.26c.2 0 .37.17.37.38v7.6h4.14c.2 0 .37.18.37.38zm9.43.22a.4.4 0 0 1-.3.16h-1.5q-.25-.01-.36-.25l-.55-1.7h-3.1l-.56 1.7a.4.4 0 0 1-.35.25h-1.5a.38.38 0 0 1-.35-.5l3.39-9.25c.05-.15.2-.25.35-.25h1.13q.26.01.36.25l3.39 9.24q.06.19-.05.35m-4.16-7.39-1.21 3.53h2.26zm13.34 5.71a.37.37 0 0 0 0 .53A4.5 4.5 0 0 0 33.59 14c1.02 0 1.92-.27 2.58-.79a2.8 2.8 0 0 0 1.07-2.25c0-.86-.27-1.62-.87-2.15-.46-.4-1-.63-1.89-.76l-1.04-.16a2 2 0 0 1-.83-.33q-.22-.19-.22-.57 0-.46.3-.73c.2-.18.53-.32 1-.32.7 0 1.25.15 1.72.6.14.14.37.14.52 0l.88-.87a.37.37 0 0 0-.01-.53A4.2 4.2 0 0 0 33.72 4c-1.01 0-1.87.3-2.48.84a3 3 0 0 0-.93 2.2q-.02 1.24.78 2.01.72.66 1.93.83l1.07.15c.5.07.65.15.8.29q.23.2.24.67-.01.5-.35.73-.34.29-1.16.3c-.87 0-1.49-.19-2.07-.76a.37.37 0 0 0-.52 0zM22.37 14a.37.37 0 0 1-.37-.38V4.38c0-.21.17-.38.37-.38h3.54q1.4 0 2.26.78c.56.52.86 1.26.86 2.13 0 .84-.37 1.52-.87 1.95A2.6 2.6 0 0 1 29.17 11q0 1.42-.9 2.23c-.56.51-1.34.76-2.22.76zm3.54-1.98c.96 0 .96-1 .96-1s0-1.02-.96-1.02H24v2.02zm-.11-4.06c1.07 0 1.07-1.02 1.07-1.02s0-1.01-1.07-1.01H24v2.03zM0 4v10a4 4 0 0 0 4 4h34a4 4 0 0 0 4-4V4a4 4 0 0 0-4-4H4a4 4 0 0 0-4 4m4-2h34a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V4c0-1.1.9-2 2-2"/></svg> <p class="fs-caption">Get early access and see previews of new features.</p> <a class="s-btn s-btn__filled s-btn__xs s-btn__icon fs-fine" href="https://stackoverflow.co/labs/"><svg aria-hidden="true" class="svg-icon iconShareSm" width="14" height="14" viewBox="0 0 14 14"><path d="M5 1H3a2 2 0 0 0-2 2v8c0 1.1.9 2 2 2h8a2 2 0 0 0 2-2V9h-2v2H3V3h2zm2 0h6v6h-2V4.5L6.5 9 5 7.5 9.5 3H7z"/></svg> Learn more about Labs</a> </div> </div> <div id="content" class="snippet-hidden"> <div id="mainbar"> <div id="tag-headline-container" class="mb24"></div> <script type="application/json" data-role="module-args" data-module-name="islands/tag-page-headline/index.mod">{"ContainerElementId":"tag-headline-container","TagName":"sinon","TagDescription":"Sinon is javascript framework to create test spies, stubs and mocks that can be used with any JavaScript unit testing framework.","TagSponsorshipAd":" \u003cstyle\u003e\n \u003c/style\u003e\n\u003cdiv class=\u0022js-zone-container zone-container-main\u0022\u003e\n \u003cdiv id=\u0022dfp-tag\u0022 class=\u0022everyonelovesstackoverflow everyoneloves__tag-sponsorship theme-light__forced bg-white\u0022\u003e\u003c/div\u003e\n\t\t\u003cdiv class=\u0022js-report-ad-button-container \u0022 style=\u0022width: 728px\u0022\u003e\u003c/div\u003e\n\u003c/div\u003e\n","ForAnonymousUser":true,"IsFollowingTag":false,"Fkey":"b39cb1a761f93912de068f8e6267ee5702b7d597a570755c5112354b099addd4"}</script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/svelte.en.js?v=ac1681a633a2"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/stacks-svelte.en.js?v=585200d05e44"></script><script defer src="https://cdn.sstatic.net/Js/webpack-chunks/2784.en.js?v=414ac3934ec2"></script><script defer src="https://cdn.sstatic.net/Js/islands/tag-page-headline.en.js?v=ed0fc6e897d0"></script> <script type="application/json" data-role="module-args" data-module-name="entry-points/questions/userQuestionList.mod">{"regularTagsString":"","moderatorTagsString":""}</script> <script defer src="https://cdn.sstatic.net/Js/questions/userQuestionList.en.js?v=59a1562d4b98"></script> <div data-controller="se-uql" data-se-uql-id="" data-se-uql-sanitize-tag-query="false"> <div class="d-flex ai-center jc-space-between mb12 sm:fd-column sm:ai-stretch"> <div class="fs-body3 flex--item fl1 mr12 sm:mr0 sm:mb12"> 2,827 questions </div> <div class="uql-nav flex--item" data-action="se-uql-list:edit-current-requested@document->se-uql#toggleEditor"> <div class="d-flex ai-center jc-space-between"> <div class="s-btn-group flex--item mr16 ff-row-nowrap js-uql-navigation"> <a class="s-btn s-btn__muted s-btn__sm is-selected js-gps-track" href="/questions/tagged/sinon?tab=Newest" aria-current="page" data-nav-value="Newest" data-gps-track="question.list.sort.clicked({ SortBy: 'Newest' })" data-shortcut="N"> <span class="s-btn--text" data-text="Newest">Newest</span> </a> <a class="s-btn s-btn__muted s-btn__sm js-gps-track" href="/questions/tagged/sinon?tab=Active" data-nav-value="Active" data-gps-track="question.list.sort.clicked({ SortBy: 'Active' })" data-shortcut="A"> <span class="s-btn--text" data-text="Active">Active</span> </a> <a class="s-btn s-btn__muted s-btn__sm uql-nav--expanded-item js-gps-track" href="/questions/tagged/sinon?tab=Bounties" data-nav-value="Bounties" data-gps-track="question.list.sort.clicked({ SortBy: 'Bountied' })" data-shortcut="E"> <span class="s-btn--text" data-text="Bountied">Bountied</span> </a> <a class="s-btn s-btn__muted s-btn__sm uql-nav--expanded-item js-gps-track" href="/questions/tagged/sinon?tab=Unanswered" data-nav-value="Unanswered" data-gps-track="question.list.sort.clicked({ SortBy: 'Unanswered' })" data-shortcut="U"> <span class="s-btn--text" data-text="Unanswered">Unanswered</span> </a> <button class="s-btn s-btn__muted s-btn__sm s-btn__dropdown" type="button" data-controller="s-popover" data-action="s-popover#toggle" data-se-uql-target="toggleMoreButton" aria-haspopup="true" aria-expanded="false" aria-controls="uql-more-popover"> <span class="s-btn--text" data-text="More">More</span> </button> </div> <div class="s-popover z-dropdown ws2 px0 py4" id="uql-more-popover" data-se-uql-target="morePopover"> <div class="s-popover--arrow"></div> <ul class="s-menu js-uql-navigation" role="menu"> <li class=" uql-nav--collapsed-item" role="menuitem"> <a href="/questions/tagged/sinon?tab=Bounties" class="s-block-link s-block-link__left js-gps-track" data-shortcut="" data-gps-track="question.list.sort.clicked({ SortBy: 'Bountied' })"> Bountied <span class="s-badge s-badge__bounty s-badge__bounty s-badge__sm lh-xs px4">0</span> </a> </li> <li class=" uql-nav--collapsed-item" role="menuitem"> <a href="/questions/tagged/sinon?tab=Unanswered" class="s-block-link s-block-link__left js-gps-track" data-shortcut="" data-gps-track="question.list.sort.clicked({ SortBy: 'Unanswered' })"> Unanswered </a> </li> <li role="menuitem"> <a href="/questions/tagged/sinon?tab=Frequent" class="s-block-link s-block-link__left js-gps-track" data-shortcut="F" data-gps-track="question.list.sort.clicked({ SortBy: 'Frequent' })"> Frequent </a> </li> <li role="menuitem"> <a href="/questions/tagged/sinon?tab=Votes" class="s-block-link s-block-link__left js-gps-track" data-shortcut="V" data-gps-track="question.list.sort.clicked({ SortBy: 'Score' })"> Score </a> </li> <li role="menuitem"> <a href="/questions/tagged/sinon?tab=Trending" class="s-block-link s-block-link__left js-gps-track" data-shortcut="H" data-gps-track="question.list.sort.clicked({ SortBy: 'Trending' })"> Trending </a> </li> <li role="menuitem"> <a href="/questions/tagged/sinon?tab=Week" class="s-block-link s-block-link__left js-gps-track" data-shortcut="W" data-gps-track="question.list.sort.clicked({ SortBy: 'Week' })"> Week </a> </li> <li role="menuitem"> <a href="/questions/tagged/sinon?tab=Month" class="s-block-link s-block-link__left js-gps-track" data-shortcut="M" data-gps-track="question.list.sort.clicked({ SortBy: 'Month' })"> Month </a> </li> <li class="s-menu--divider" role="separator"></li> <li role="menuitem"> <span class="s-block-link c-default fc-black-350 js-gps-track" data-gps-track="question.list.sort.clicked({ SortBy: 'Unanswered (my tags)' })"> Unanswered (my tags) </span> </li> </ul> </div> <div class="flex--item"> <button class="s-btn s-btn__outlined s-btn__sm s-btn__icon ws-nowrap" role="button" data-controller="s-expandable-control" data-s-expandable-control-toggle-class="is-selected" data-se-uql-target="toggleFormButton" aria-expanded="false" aria-controls="uql-form"> <svg aria-hidden="true" class="svg-icon iconFilter" width="18" height="18" viewBox="0 0 18 18"><path d="M2 4h14v2H2zm2 4h10v2H4zm8 4H6v2h6z"/></svg> Filter </button> </div> </div> </div> </div> <form class="s-expandable ps-relative z-active" id="uql-form" data-se-uql-target="form" data-action="se-uql#navigate"> <input name="uqlId" type="hidden"/> <div class="s-expandable--content"> <div class="bg-black-150 ba bc-black-225 bar-sm mb16"> <div class="px12 py16"> <div class="d-flex gs32 fw-wrap"> <div class="flex--item"> <fieldset class="d-flex gs8 gsy fd-column"> <legend class="flex--item s-label px0">Filter by</legend> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-checkbox d-block" type="checkbox" name="filterId" value="NoAnswers" id="2cc91f23-0147-479c-95d0-8feaca187205" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="2cc91f23-0147-479c-95d0-8feaca187205" id="3fd548f8-2768-403d-8a7d-d9617f5964a5">No answers</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-checkbox d-block" type="checkbox" name="filterId" value="NoAcceptedAnswer" id="d011c192-1652-4f1c-8eea-9b61cba3f378" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="d011c192-1652-4f1c-8eea-9b61cba3f378" id="f691fd95-e06b-4113-b985-e4991bace4f0">No accepted answer</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-checkbox d-block" type="checkbox" name="filterId" value="Bounty" id="97630e96-baaa-43de-86b2-5349e14bc385" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="97630e96-baaa-43de-86b2-5349e14bc385" id="9835a2f4-690d-48b2-b072-6e1b551b10c0">Has bounty</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-number d-block w64" type="number" name="days" value="" min="1" id="65036e9e-ee2d-4408-8096-e2a3a6517663" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="65036e9e-ee2d-4408-8096-e2a3a6517663" id="5652d387-994c-49dd-b734-a52d066eafeb">Days old</label> </div> </div> </fieldset> </div> <div class="flex--item"> <fieldset class="d-flex gs8 gsy fd-column"> <legend class="flex--item s-label px0">Sorted by</legend> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="Newest" checked="checked" id="4d620e9c-f249-4797-8b71-2c09e1e89952" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="4d620e9c-f249-4797-8b71-2c09e1e89952" id="7e0cbd99-ceb4-49db-aad3-8a010783d673">Newest</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="RecentActivity" id="fa893316-0eb6-4128-8348-4bc1d88cd44e" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="fa893316-0eb6-4128-8348-4bc1d88cd44e" id="ca285026-294b-44ba-9724-b9ecb5e92fde">Recent activity</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="MostVotes" id="69f67058-d184-40ac-b9f7-e4848443d745" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="69f67058-d184-40ac-b9f7-e4848443d745" id="b3af7858-c025-497c-851a-7dc1578c9b62">Highest score</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="MostFrequent" id="e95e8d8d-1829-4fb6-9e35-3b76ae5fcaa3" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="e95e8d8d-1829-4fb6-9e35-3b76ae5fcaa3" id="112d2dd8-9e69-45bb-8538-6f802cefad05">Most frequent</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="BountyEndingSoon" id="3f469947-d62b-4790-bf1e-9cf728fa3888" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="3f469947-d62b-4790-bf1e-9cf728fa3888" id="74d1702e-4377-4e2e-a95b-44e9d4acf417">Bounty ending soon</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="Hot" id="1ad63dd7-12f3-42fb-a3a1-218a83b17f77" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="1ad63dd7-12f3-42fb-a3a1-218a83b17f77" id="dd27d844-ae50-482b-bc2e-b58eabddc151">Trending</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="sortId" value="HotNoTime" id="02b2c188-cd91-462f-b3fa-19927d897051" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="02b2c188-cd91-462f-b3fa-19927d897051" id="9460f8b3-c14b-4805-b8f1-43ff26b529a0">Most activity</label> </div> </div> </fieldset> </div> <div class="flex--item"> <fieldset class="d-flex gs8 gsy fd-column"> <legend class="flex--item s-label px0">Tagged with</legend> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="tagModeId" value="Watched" id="1dcbc713-7fa4-4757-b336-2a9a019fb40e" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="1dcbc713-7fa4-4757-b336-2a9a019fb40e" id="7134d3a6-27fe-4bc4-97de-78f7c555b2d0">My watched tags</label> </div> </div> <div class="flex--item"> <div class="d-flex gs4 gsx ai-center"> <div class="flex--item"> <input class="s-radio d-block" type="radio" name="tagModeId" value="Specified" checked="checked" id="08a4275e-ef69-4e7d-8d14-970c8cd339f9" /> </div> <label class="flex--item s-label fw-normal ws-nowrap" for="08a4275e-ef69-4e7d-8d14-970c8cd339f9" id="239bc28c-c5bb-49bb-9698-bb44ba10e053">The following tags:</label> </div> </div> </fieldset> <div class="ps-relative ml24 mt8 ws2"> <input id="uql-modal-tag-input" class="w100 s-input" name="tagQuery" data-se-uql-target="tagQuery" type="text" size="60" tabindex="0" aria-labelledby="239bc28c-c5bb-49bb-9698-bb44ba10e053" placeholder="e.g. javascript or python" value="sinon"> </div> </div> </div> </div> <div class="p12 bt bc-black-225"> <div class="d-flex"> <div class="d-flex gs4 gsx fl1"> <button class="s-btn s-btn__sm s-btn__filled flex--item js-gps-track" type="submit" data-se-uql-target="applyButton" data-gps-track="question.list.apply_filter.clicked">Apply filter</button> </div> <div class="flex--item"> <button class="s-btn s-btn__sm" data-action="se-uql#cancelEditor" type="button">Cancel</button> </div> </div> </div> </div> </div> </form> </div> <div id="questions" class=" flush-left"> <div id="question-summary-79395942" class="s-post-summary js-post-summary" data-post-id="79395942" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="31 views"> <span class="s-post-summary--stats-item-number">31</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79395942/mock-exported-instances-of-private-classes" class="s-link">Mock exported instances of private classes</a> </h3> <div class="s-post-summary--content-excerpt"> I have a class "SomeService" which isn't exported. I export the instance which can be used to call functions on it. Basicly a singleton. Here the example export const someService = new ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-typescript t-unit-testing t-mochaûjs t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/typescript" class="s-tag post-tag flex--item mt0 js-tagname-typescript" title="show questions tagged 'typescript'" aria-label="show questions tagged 'typescript'" rel="tag" aria-labelledby="tag-typescript-tooltip-container" data-tag-menu-origin="Unknown">typescript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/unit-testing" class="s-tag post-tag flex--item mt0 js-tagname-unit-testing" title="show questions tagged 'unit-testing'" aria-label="show questions tagged 'unit-testing'" rel="tag" aria-labelledby="tag-unit-testing-tooltip-container" data-tag-menu-origin="Unknown">unit-testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/6235807/lynxsven" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="6235807"> <div class="gravatar-wrapper-16"> <img src="https://i.sstatic.net/LSR9j.jpg?s=32" alt="lynxSven's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/6235807/lynxsven" class="flex--item">lynxSven</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">594</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2025-01-29 07:06:14Z' class='relativetime'>Jan 29 at 7:06</span></time> </div> </div> </div> </div> <div id="question-summary-79350083" class="s-post-summary js-post-summary" data-post-id="79350083" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 1"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">vote</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="49 views"> <span class="s-post-summary--stats-item-number">49</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79350083/why-are-my-tests-failing-for-a-whatsappbot-using-whatsapp-web-js-potential-issu" class="s-link">Why are my tests failing for a WhatsAppbot using whatsapp-web.js? Potential issue with mocks</a> </h3> <div class="s-post-summary--content-excerpt"> I have written a WhatsApp bot using whatsapp-web.js, and it works fine in production. However, when I try to run tests, they fail, and I suspect the issue lies with my mocks, but I am not entirely ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-typescript t-mochaûjs t-whatsapp t-chai t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/typescript" class="s-tag post-tag flex--item mt0 js-tagname-typescript" title="show questions tagged 'typescript'" aria-label="show questions tagged 'typescript'" rel="tag" aria-labelledby="tag-typescript-tooltip-container" data-tag-menu-origin="Unknown">typescript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/whatsapp" class="s-tag post-tag flex--item mt0 js-tagname-whatsapp" title="show questions tagged 'whatsapp'" aria-label="show questions tagged 'whatsapp'" rel="tag" aria-labelledby="tag-whatsapp-tooltip-container" data-tag-menu-origin="Unknown">whatsapp</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/chai" class="s-tag post-tag flex--item mt0 js-tagname-chai" title="show questions tagged 'chai'" aria-label="show questions tagged 'chai'" rel="tag" aria-labelledby="tag-chai-tooltip-container" data-tag-menu-origin="Unknown">chai</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/9991250/austin" class="s-avatar s-avatar__16 s-user-card--avatar js-user-hover-target" data-user-id="9991250"> <div class="gravatar-wrapper-16"> <img src="https://www.gravatar.com/avatar/d607cf986464a711fe5d190ec4d7a5a4?s=32&d=identicon&r=PG&f=y&so-version=2" alt="Austin's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/9991250/austin" class="flex--item">Austin</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">424</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2025-01-12 14:40:31Z' class='relativetime'>Jan 12 at 14:40</span></time> </div> </div> </div> </div> <div id="question-summary-79316224" class="s-post-summary js-post-summary" data-post-id="79316224" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="74 views"> <span class="s-post-summary--stats-item-number">74</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79316224/mocha-chai-test-cases-are-not-completing-due-to-on-sinon-stub" class="s-link">Mocha chai test cases are not completing due to on sinon stub</a> </h3> <div class="s-post-summary--content-excerpt"> Am using a typical node express typescript project, where i have controller and service file, am trying to write simple testcase for controller file, its executes the test case but after that it's not ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-javascript t-nodeûjs t-unit-testing t-mochaûjs t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/javascript" class="s-tag post-tag flex--item mt0 js-tagname-javascript" title="show questions tagged 'javascript'" aria-label="show questions tagged 'javascript'" rel="tag" aria-labelledby="tag-javascript-tooltip-container" data-tag-menu-origin="Unknown">javascript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/unit-testing" class="s-tag post-tag flex--item mt0 js-tagname-unit-testing" title="show questions tagged 'unit-testing'" aria-label="show questions tagged 'unit-testing'" rel="tag" aria-labelledby="tag-unit-testing-tooltip-container" data-tag-menu-origin="Unknown">unit-testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/3478726/kannan-t" class="s-avatar s-avatar__16 s-user-card--avatar js-user-hover-target" data-user-id="3478726"> <div class="gravatar-wrapper-16"> <img src="https://i.sstatic.net/PhuQS.jpg?s=32" alt="Kannan T's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/3478726/kannan-t" class="flex--item">Kannan T</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">1,749</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-12-29 19:41:10Z' class='relativetime'>Dec 29, 2024 at 19:41</span></time> </div> </div> </div> </div> <div id="question-summary-79153030" class="s-post-summary js-post-summary" data-post-id="79153030" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="36 views"> <span class="s-post-summary--stats-item-number">36</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79153030/issues-with-mocking-s3-multipart-upload-after-migrating-from-aws-sdk-v2-to-v3" class="s-link">Issues with Mocking S3 Multipart Upload After Migrating from AWS SDK v2 to v3</a> </h3> <div class="s-post-summary--content-excerpt"> I'm trying to run a test. It worked fine with AWS SDK v2, but after migrating to v3 using codemod,I'm facing issues. This is my index.spec.js to test the test using mocha and sinon. My test is getting ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-nodeûjs t-amazon-s3 t-testing t-mochaûjs t-sinon"> <a class="themed subcommunity-topic-avatar subcommunity-topic-aws s-avatar s-avatar__24 mr2 js-community-tag mb2" style="" data-controller="s-tooltip" title="AWS Collective" href="/collectives/aws"></a> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/amazon-s3" class="s-tag post-tag flex--item mt0 js-tagname-amazon-s3" title="show questions tagged 'amazon-s3'" aria-label="show questions tagged 'amazon-s3'" rel="tag" aria-labelledby="tag-amazon-s3-tooltip-container" data-tag-menu-origin="Unknown">amazon-s3</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/testing" class="s-tag post-tag flex--item mt0 js-tagname-testing" title="show questions tagged 'testing'" aria-label="show questions tagged 'testing'" rel="tag" aria-labelledby="tag-testing-tooltip-container" data-tag-menu-origin="Unknown">testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/14411208/adithya-sankar" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="14411208"> <div class="gravatar-wrapper-16"> <img src="https://lh4.googleusercontent.com/-zGEnntx1rr0/AAAAAAAAAAI/AAAAAAAAAAA/AMZuucm8JnTnNswtqDNrRbnA6BJLooYYPA/photo.jpg?sz=32" alt="Adithya sankar's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/14411208/adithya-sankar" class="flex--item">Adithya sankar</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">21</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-11-03 15:21:07Z' class='relativetime'>Nov 3, 2024 at 15:21</span></time> </div> </div> </div> </div> <div id="question-summary-79147341" class="s-post-summary js-post-summary" data-post-id="79147341" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item has-answers " title="1 answer"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">answer</span> </div> <div class="s-post-summary--stats-item " title="102 views"> <span class="s-post-summary--stats-item-number">102</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79147341/in-node-js-esm-i-want-to-stub-an-exported-module-thats-the-default" class="s-link">in node.js ESM I want to stub an exported module thats the default</a> </h3> <div class="s-post-summary--content-excerpt"> I have a very simple auth middleware with an export default () anonymous function: export default () => async (req, res, next) => { try { // some auth implementation... does not matter ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-javascript t-nodeûjs t-unit-testing t-es6-modules t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/javascript" class="s-tag post-tag flex--item mt0 js-tagname-javascript" title="show questions tagged 'javascript'" aria-label="show questions tagged 'javascript'" rel="tag" aria-labelledby="tag-javascript-tooltip-container" data-tag-menu-origin="Unknown">javascript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/unit-testing" class="s-tag post-tag flex--item mt0 js-tagname-unit-testing" title="show questions tagged 'unit-testing'" aria-label="show questions tagged 'unit-testing'" rel="tag" aria-labelledby="tag-unit-testing-tooltip-container" data-tag-menu-origin="Unknown">unit-testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/es6-modules" class="s-tag post-tag flex--item mt0 js-tagname-es6-modules" title="show questions tagged 'es6-modules'" aria-label="show questions tagged 'es6-modules'" rel="tag" aria-labelledby="tag-es6-modules-tooltip-container" data-tag-menu-origin="Unknown">es6-modules</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/7331538/bcsta" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="7331538"> <div class="gravatar-wrapper-16"> <img src="https://www.gravatar.com/avatar/603a48331ac6169d86f15d0d1b3a32e6?s=32&d=identicon&r=PG&f=y&so-version=2" alt="bcsta's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/7331538/bcsta" class="flex--item">bcsta</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">2,307</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-11-01 08:23:47Z' class='relativetime'>Nov 1, 2024 at 8:23</span></time> </div> </div> </div> </div> <div id="question-summary-79142317" class="s-post-summary js-post-summary" data-post-id="79142317" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="30 views"> <span class="s-post-summary--stats-item-number">30</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79142317/adonis-ts-unit-test-code-coverage-nyc-still-got-uncovered-line" class="s-link">adonis .ts unit test code coverage nyc still got uncovered line</a> </h3> <div class="s-post-summary--content-excerpt"> I have test using nyc and sinon mock test('updateNewsletter - should update starredAt when status is "starred"', async ({ assert }) => { const updateStub = sinon.stub().resolves(1) ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-typescript t-code-coverage t-sinon t-adonisûjs t-nyc"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/typescript" class="s-tag post-tag flex--item mt0 js-tagname-typescript" title="show questions tagged 'typescript'" aria-label="show questions tagged 'typescript'" rel="tag" aria-labelledby="tag-typescript-tooltip-container" data-tag-menu-origin="Unknown">typescript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/code-coverage" class="s-tag post-tag flex--item mt0 js-tagname-code-coverage" title="show questions tagged 'code-coverage'" aria-label="show questions tagged 'code-coverage'" rel="tag" aria-labelledby="tag-code-coverage-tooltip-container" data-tag-menu-origin="Unknown">code-coverage</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/adonis.js" class="s-tag post-tag flex--item mt0 js-tagname-adonisûjs" title="show questions tagged 'adonis.js'" aria-label="show questions tagged 'adonis.js'" rel="tag" aria-labelledby="tag-adonis.js-tooltip-container" data-tag-menu-origin="Unknown">adonis.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/nyc" class="s-tag post-tag flex--item mt0 js-tagname-nyc" title="show questions tagged 'nyc'" aria-label="show questions tagged 'nyc'" rel="tag" aria-labelledby="tag-nyc-tooltip-container" data-tag-menu-origin="Unknown">nyc</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/7627517/halomoan-carel-demak-s" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="7627517"> <div class="gravatar-wrapper-16"> <img src="https://graph.facebook.com/1339944526082524/picture?type=large" alt="Halomoan Carel Demak S's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/7627517/halomoan-carel-demak-s" class="flex--item">Halomoan Carel Demak S</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">1</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-10-30 18:06:20Z' class='relativetime'>Oct 30, 2024 at 18:06</span></time> </div> </div> </div> </div> <div id="question-summary-79105205" class="s-post-summary js-post-summary" data-post-id="79105205" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 1"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">vote</span> </div> <div class="s-post-summary--stats-item has-answers " title="1 answer"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">answer</span> </div> <div class="s-post-summary--stats-item " title="26 views"> <span class="s-post-summary--stats-item-number">26</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79105205/stub-mongodb-calls-with-sinon" class="s-link">Stub MongoDB calls with Sinon</a> </h3> <div class="s-post-summary--content-excerpt"> I am trying test my routes but I can't stub my repository function, I want to stub the function that in the repository that calls the database. This is my test file: import { expect } from "chai&... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-testing t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/testing" class="s-tag post-tag flex--item mt0 js-tagname-testing" title="show questions tagged 'testing'" aria-label="show questions tagged 'testing'" rel="tag" aria-labelledby="tag-testing-tooltip-container" data-tag-menu-origin="Unknown">testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/10996726/ed-angelis-ribeiro" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="10996726"> <div class="gravatar-wrapper-16"> <img src="https://lh5.googleusercontent.com/-OgOjO_cln1s/AAAAAAAAAAI/AAAAAAAAUc4/byCWI9Vr590/photo.jpg?sz=32" alt="Ed Angelis Ribeiro's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/10996726/ed-angelis-ribeiro" class="flex--item">Ed Angelis Ribeiro</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">109</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-10-19 14:51:09Z' class='relativetime'>Oct 19, 2024 at 14:51</span></time> </div> </div> </div> </div> <div id="question-summary-79043507" class="s-post-summary js-post-summary" data-post-id="79043507" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="25 views"> <span class="s-post-summary--stats-item-number">25</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79043507/how-to-test-writetostream-with-sinon-on-nodejs" class="s-link">How to test writeToStream with sinon on Nodejs?</a> </h3> <div class="s-post-summary--content-excerpt"> Here is the code I'm trying to test. I'm using sinon and supertest but if needed I can use Jest too. I managed to unit test without stubbing writeToStream but I do not think I should be doing it like ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-nodeûjs t-unit-testing t-stream t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/unit-testing" class="s-tag post-tag flex--item mt0 js-tagname-unit-testing" title="show questions tagged 'unit-testing'" aria-label="show questions tagged 'unit-testing'" rel="tag" aria-labelledby="tag-unit-testing-tooltip-container" data-tag-menu-origin="Unknown">unit-testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/stream" class="s-tag post-tag flex--item mt0 js-tagname-stream" title="show questions tagged 'stream'" aria-label="show questions tagged 'stream'" rel="tag" aria-labelledby="tag-stream-tooltip-container" data-tag-menu-origin="Unknown">stream</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/19077231/sinan-bayar" class="s-avatar s-avatar__16 s-user-card--avatar js-user-hover-target" data-user-id="19077231"> <div class="gravatar-wrapper-16"> <img src="https://i.sstatic.net/Y02Py.jpg?s=32" alt="Sinan Bayar's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/19077231/sinan-bayar" class="flex--item">Sinan Bayar</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">11</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-10-01 14:07:39Z' class='relativetime'>Oct 1, 2024 at 14:07</span></time> </div> </div> </div> </div> <div id="question-summary-79025171" class="s-post-summary js-post-summary" data-post-id="79025171" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="25 views"> <span class="s-post-summary--stats-item-number">25</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/79025171/supertest-and-sinon-stubbing-same-function-twice-or-more" class="s-link">Supertest and Sinon - stubbing same function twice (or more)</a> </h3> <div class="s-post-summary--content-excerpt"> I'm unable to user supertest with sinon to stub the same function twice in the same test file. How can I do this? Here is the code I have currently: const { app } = require('../../app'); const request ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-nodeûjs t-sinon t-supertest"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/supertest" class="s-tag post-tag flex--item mt0 js-tagname-supertest" title="show questions tagged 'supertest'" aria-label="show questions tagged 'supertest'" rel="tag" aria-labelledby="tag-supertest-tooltip-container" data-tag-menu-origin="Unknown">supertest</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/14096849/robert" class="s-avatar s-avatar__16 s-user-card--avatar js-user-hover-target" data-user-id="14096849"> <div class="gravatar-wrapper-16"> <img src="https://lh3.googleusercontent.com/-iTi2KbwfifE/AAAAAAAAAAI/AAAAAAAAAAA/AMZuuckSVeRaBHdHX0vzeZuSClRk9v-oMw/photo.jpg?sz=32" alt="Robert's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/14096849/robert" class="flex--item">Robert</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">322</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-09-26 00:57:40Z' class='relativetime'>Sep 26, 2024 at 0:57</span></time> </div> </div> </div> </div> <div id="question-summary-78980387" class="s-post-summary js-post-summary" data-post-id="78980387" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 1"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">vote</span> </div> <div class="s-post-summary--stats-item has-answers has-accepted-answer" title="one of the answers was accepted as the correct answer"> <svg aria-hidden="true" class="svg-icon iconCheckmarkSm" width="14" height="14" viewBox="0 0 14 14"><path d="M13 3.41 11.59 2 5 8.59 2.41 6 1 7.41l4 4z"/></svg> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">answer</span> </div> <div class="s-post-summary--stats-item " title="79 views"> <span class="s-post-summary--stats-item-number">79</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78980387/how-do-i-mock-mongodb-connection-and-test-it" class="s-link">How do i mock MongoDb Connection and Test it</a> </h3> <div class="s-post-summary--content-excerpt"> My DB Class to test I have a DB class where i encapsulate Mongodb methods to test import mongodb from 'mongodb'; import dotenv from 'dotenv'; // Comfigure dotenv dotenv.config(); // eslint-disable-... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-javascript t-nodeûjs t-mongodb t-mochaûjs t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/javascript" class="s-tag post-tag flex--item mt0 js-tagname-javascript" title="show questions tagged 'javascript'" aria-label="show questions tagged 'javascript'" rel="tag" aria-labelledby="tag-javascript-tooltip-container" data-tag-menu-origin="Unknown">javascript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mongodb" class="s-tag post-tag flex--item mt0 js-tagname-mongodb" title="show questions tagged 'mongodb'" aria-label="show questions tagged 'mongodb'" rel="tag" aria-labelledby="tag-mongodb-tooltip-container" data-tag-menu-origin="Unknown">mongodb</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/10261394/rungene" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="10261394"> <div class="gravatar-wrapper-16"> <img src="https://www.gravatar.com/avatar/0b83b968b01446d4bd3fe10693851fb8?s=32&d=identicon&r=PG&f=y&so-version=2" alt="rungene's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/10261394/rungene" class="flex--item">rungene</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">241</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-09-13 02:07:56Z' class='relativetime'>Sep 13, 2024 at 2:07</span></time> </div> </div> </div> </div> <div id="question-summary-78889731" class="s-post-summary js-post-summary" data-post-id="78889731" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="34 views"> <span class="s-post-summary--stats-item-number">34</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78889731/sinon-unit-tests-with-firebase-realtime-database-listeners" class="s-link">Sinon Unit Tests with Firebase Realtime Database Listeners</a> </h3> <div class="s-post-summary--content-excerpt"> I am working out some kinks in my unit tests for a node app with a Firebase RTDB integration. I am trying to build tests for my Firebase listeners, but one is giving me fits. For example, if I have ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-nodeûjs t-sinon t-sinon-chai"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon-chai" class="s-tag post-tag flex--item mt0 js-tagname-sinon-chai" title="show questions tagged 'sinon-chai'" aria-label="show questions tagged 'sinon-chai'" rel="tag" aria-labelledby="tag-sinon-chai-tooltip-container" data-tag-menu-origin="Unknown">sinon-chai</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/7740459/tukool" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="7740459"> <div class="gravatar-wrapper-16"> <img src="https://i.sstatic.net/ZEK5f.jpg?s=32" alt="tukool's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/7740459/tukool" class="flex--item">tukool</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">132</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-08-19 20:48:07Z' class='relativetime'>Aug 19, 2024 at 20:48</span></time> </div> </div> </div> </div> <div id="question-summary-78828894" class="s-post-summary js-post-summary" data-post-id="78828894" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 1"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">vote</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="73 views"> <span class="s-post-summary--stats-item-number">73</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78828894/stubbing-firestore-with-sinon-does-not-work" class="s-link">Stubbing Firestore with Sinon does not work</a> </h3> <div class="s-post-summary--content-excerpt"> I'm trying to stub a specific Firestore Document Reference which I want to get with the Firestore get Function with Sinon. Unfortunately I'm not able to make it work. The Function which should call ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-javascript t-firebase t-unit-testing t-google-cloud-firestore t-sinon"> <a class="themed subcommunity-topic-avatar subcommunity-topic-google-cloud s-avatar s-avatar__24 mr2 js-community-tag mb2" style="" data-controller="s-tooltip" title="Google Cloud Collective" href="/collectives/google-cloud"></a> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/javascript" class="s-tag post-tag flex--item mt0 js-tagname-javascript" title="show questions tagged 'javascript'" aria-label="show questions tagged 'javascript'" rel="tag" aria-labelledby="tag-javascript-tooltip-container" data-tag-menu-origin="Unknown">javascript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/firebase" class="s-tag post-tag flex--item mt0 js-tagname-firebase" title="show questions tagged 'firebase'" aria-label="show questions tagged 'firebase'" rel="tag" aria-labelledby="tag-firebase-tooltip-container" data-tag-menu-origin="Unknown">firebase</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/unit-testing" class="s-tag post-tag flex--item mt0 js-tagname-unit-testing" title="show questions tagged 'unit-testing'" aria-label="show questions tagged 'unit-testing'" rel="tag" aria-labelledby="tag-unit-testing-tooltip-container" data-tag-menu-origin="Unknown">unit-testing</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/google-cloud-firestore" class="s-tag post-tag flex--item mt0 js-tagname-google-cloud-firestore" title="show questions tagged 'google-cloud-firestore'" aria-label="show questions tagged 'google-cloud-firestore'" rel="tag" aria-labelledby="tag-google-cloud-firestore-tooltip-container" data-tag-menu-origin="Unknown">google-cloud-firestore</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/7173127/marcel" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="7173127"> <div class="gravatar-wrapper-16"> <img src="https://i.sstatic.net/z3KOE.jpg?s=32" alt="Marcel's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/7173127/marcel" class="flex--item">Marcel</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">502</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-08-03 14:10:40Z' class='relativetime'>Aug 3, 2024 at 14:10</span></time> </div> </div> </div> </div> <div id="question-summary-78801831" class="s-post-summary js-post-summary" data-post-id="78801831" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="47 views"> <span class="s-post-summary--stats-item-number">47</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78801831/sinon-sandboxes-not-stubbing-functions-in-a-controller-in-a-express-js-app" class="s-link">Sinon sandboxes not stubbing functions in a controller in a express js app</a> </h3> <div class="s-post-summary--content-excerpt"> I tried stubbing functions that were in a controller in an express app and when I called the controller function, assertions I wrote throws an error that the stubbed functions are not called or not ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-javascript t-express t-mochaûjs t-sinon"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/javascript" class="s-tag post-tag flex--item mt0 js-tagname-javascript" title="show questions tagged 'javascript'" aria-label="show questions tagged 'javascript'" rel="tag" aria-labelledby="tag-javascript-tooltip-container" data-tag-menu-origin="Unknown">javascript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/express" class="s-tag post-tag flex--item mt0 js-tagname-express" title="show questions tagged 'express'" aria-label="show questions tagged 'express'" rel="tag" aria-labelledby="tag-express-tooltip-container" data-tag-menu-origin="Unknown">express</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/mocha.js" class="s-tag post-tag flex--item mt0 js-tagname-mochaûjs" title="show questions tagged 'mocha.js'" aria-label="show questions tagged 'mocha.js'" rel="tag" aria-labelledby="tag-mocha.js-tooltip-container" data-tag-menu-origin="Unknown">mocha.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/22833797/emmanuel-ibekwe" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="22833797"> <div class="gravatar-wrapper-16"> <img src="https://lh3.googleusercontent.com/a/ACg8ocJhU5MsKKR31l2qmpwDMm3KLqm1Sh_5eB1QQ8onUW9Z=k-s32" alt="Emmanuel Ibekwe's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/22833797/emmanuel-ibekwe" class="flex--item">Emmanuel Ibekwe</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">1</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-07-27 15:53:26Z' class='relativetime'>Jul 27, 2024 at 15:53</span></time> </div> </div> </div> </div> <div id="question-summary-78763780" class="s-post-summary js-post-summary" data-post-id="78763780" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item has-answers " title="1 answer"> <span class="s-post-summary--stats-item-number">1</span> <span class="s-post-summary--stats-item-unit">answer</span> </div> <div class="s-post-summary--stats-item " title="45 views"> <span class="s-post-summary--stats-item-number">45</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78763780/api-tests-are-all-passing-but-still-giving-a-time-out-error" class="s-link">API tests are all passing, but still giving a time-out error</a> </h3> <div class="s-post-summary--content-excerpt"> I am trying to unit test all of my API calls. Every call passes the test, but i still get an error saying: ✘ Timed out while running tests Failed to exit when running test.js. I have tried adding a ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-nodeûjs t-express t-sinon t-ava t-proxyquire"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/node.js" class="s-tag post-tag flex--item mt0 js-tagname-nodeûjs" title="show questions tagged 'node.js'" aria-label="show questions tagged 'node.js'" rel="tag" aria-labelledby="tag-node.js-tooltip-container" data-tag-menu-origin="Unknown">node.js</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/express" class="s-tag post-tag flex--item mt0 js-tagname-express" title="show questions tagged 'express'" aria-label="show questions tagged 'express'" rel="tag" aria-labelledby="tag-express-tooltip-container" data-tag-menu-origin="Unknown">express</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/ava" class="s-tag post-tag flex--item mt0 js-tagname-ava" title="show questions tagged 'ava'" aria-label="show questions tagged 'ava'" rel="tag" aria-labelledby="tag-ava-tooltip-container" data-tag-menu-origin="Unknown">ava</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/proxyquire" class="s-tag post-tag flex--item mt0 js-tagname-proxyquire" title="show questions tagged 'proxyquire'" aria-label="show questions tagged 'proxyquire'" rel="tag" aria-labelledby="tag-proxyquire-tooltip-container" data-tag-menu-origin="Unknown">proxyquire</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/24356753/giel-v-bussel" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="24356753"> <div class="gravatar-wrapper-16"> <img src="https://www.gravatar.com/avatar/a4a6aaea8257b326b79327e59fdfcd60?s=32&d=identicon&r=PG&f=y&so-version=2" alt="Giel v Bussel's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/24356753/giel-v-bussel" class="flex--item">Giel v Bussel</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">13</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-07-18 10:20:59Z' class='relativetime'>Jul 18, 2024 at 10:20</span></time> </div> </div> </div> </div> <div id="question-summary-78744243" class="s-post-summary js-post-summary" data-post-id="78744243" data-post-type-id="1"> <div class="s-post-summary--stats js-post-summary-stats"> <div class="s-post-summary--stats-item s-post-summary--stats-item__emphasized" title="Score of 0"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">votes</span> </div> <div class="s-post-summary--stats-item " title="0 answers"> <span class="s-post-summary--stats-item-number">0</span> <span class="s-post-summary--stats-item-unit">answers</span> </div> <div class="s-post-summary--stats-item " title="29 views"> <span class="s-post-summary--stats-item-number">29</span> <span class="s-post-summary--stats-item-unit">views</span> </div> </div> <div class="s-post-summary--content"> <h3 class="s-post-summary--content-title"> <a href="/questions/78744243/jest-has-different-behavior-in-watch-mode" class="s-link">Jest has different behavior in watch mode</a> </h3> <div class="s-post-summary--content-excerpt"> I'm writing a extension for chrome omnibox. And I'm using jest to write testing, but I found that the behavior of npx jest and npx jest --watchAll are different. Detailly, npx jest works fine and it ... </div> <div class="s-post-summary--meta"> <div class="s-post-summary--meta-tags d-inline-block tags js-tags t-typescript t-google-chrome-extension t-jestjs t-sinon t-ts-jest"> <ul class='ml0 list-ls-none js-post-tag-list-wrapper d-inline'><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/typescript" class="s-tag post-tag flex--item mt0 js-tagname-typescript" title="show questions tagged 'typescript'" aria-label="show questions tagged 'typescript'" rel="tag" aria-labelledby="tag-typescript-tooltip-container" data-tag-menu-origin="Unknown">typescript</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/google-chrome-extension" class="s-tag post-tag flex--item mt0 js-tagname-google-chrome-extension" title="show questions tagged 'google-chrome-extension'" aria-label="show questions tagged 'google-chrome-extension'" rel="tag" aria-labelledby="tag-google-chrome-extension-tooltip-container" data-tag-menu-origin="Unknown">google-chrome-extension</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/jestjs" class="s-tag post-tag flex--item mt0 js-tagname-jestjs" title="show questions tagged 'jestjs'" aria-label="show questions tagged 'jestjs'" rel="tag" aria-labelledby="tag-jestjs-tooltip-container" data-tag-menu-origin="Unknown">jestjs</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/sinon" class="s-tag post-tag flex--item mt0 js-tagname-sinon" title="show questions tagged 'sinon'" aria-label="show questions tagged 'sinon'" rel="tag" aria-labelledby="tag-sinon-tooltip-container" data-tag-menu-origin="Unknown">sinon</a></li><li class='d-inline mr4 js-post-tag-list-item'><a href="/questions/tagged/ts-jest" class="s-tag post-tag flex--item mt0 js-tagname-ts-jest" title="show questions tagged 'ts-jest'" aria-label="show questions tagged 'ts-jest'" rel="tag" aria-labelledby="tag-ts-jest-tooltip-container" data-tag-menu-origin="Unknown">ts-jest</a></li></ul> </div> <div class="s-user-card s-user-card__minimal" aria-live="polite"> <a href="/users/7114796/july-treee" class="s-avatar s-avatar__16 s-user-card--avatar" data-user-id="7114796"> <div class="gravatar-wrapper-16"> <img src="https://www.gravatar.com/avatar/1e6099c39e3f78c32b9582949817f5de?s=32&d=identicon&r=PG&f=y&so-version=2" alt="July Treee's user avatar" width="16" , height="16" class="s-avatar--image" /> </div> </a> <div class="s-user-card--info"> <div class="s-user-card--link d-flex gs4" > <a href="/users/7114796/july-treee" class="flex--item">July Treee</a> </div> <ul class="s-user-card--awards"> <li class="s-user-card--rep"><span class="todo-no-class-here" title="reputation score " dir="ltr">111</span></li> </ul> </div> <time class="s-user-card--time">asked <span title='2024-07-13 15:21:14Z' class='relativetime'>Jul 13, 2024 at 15:21</span></time> </div> </div> </div> </div> </div> <br class="clear-both" /> <div class="s-pagination site1 themed page-sizer float-right"> <a href="/questions/tagged/sinon?tab=newest&pagesize=15" title="Show 15 items per page" class="s-pagination--item is-selected" aria-current="true">15</a> <a href="/questions/tagged/sinon?tab=newest&pagesize=30" title="Show 30 items per page" class="s-pagination--item">30</a> <a href="/questions/tagged/sinon?tab=newest&pagesize=50" title="Show 50 items per page" class="s-pagination--item">50</a> <span class="s-pagination--item s-pagination--item__clear">per page</span> </div> <div class="s-pagination site1 themed pager float-left"> <div class="s-pagination--item is-selected" aria-current="page">1</div> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=2&pagesize=15" rel="" title="Go to page 2">2</a> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=3&pagesize=15" rel="" title="Go to page 3">3</a> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=4&pagesize=15" rel="" title="Go to page 4">4</a> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=5&pagesize=15" rel="" title="Go to page 5">5</a> <div class="s-pagination--item s-pagination--item__clear" >…</div> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=189&pagesize=15" rel="" title="Go to page 189">189</a> <a class="s-pagination--item js-pagination-item" href="/questions/tagged/sinon?tab=newest&page=2&pagesize=15" rel="next" title="Go to page 2"> Next</a></div> </div> <div id="sidebar"> <div class="s-sidebarwidget s-sidebarwidget__yellow s-anchors s-anchors__grayscale mb16" data-tracker="cb=1"> <ul class="s-sidebarwidget--content s-sidebarwidget__items p0"> <li class="s-sidebarwidget--header"> The Overflow Blog </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <svg aria-hidden="true" class="va-text-top svg-icon iconPencilSm" width="14" height="14" viewBox="0 0 14 14"><path fill="#F1B600" d="m2 10.12 6.37-6.43 1.88 1.88L3.88 12H2z"/><path fill="#E87C87" d="m11.1 1.71 1.13 1.12c.2.2.2.51 0 .71L11.1 4.7 9.21 2.86l1.17-1.15c.2-.2.51-.2.71 0"/></svg> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://stackoverflow.blog/2025/02/14/solving-the-data-doom-loop/" class="js-gps-track" data-ga="["community bulletin board","The Overflow Blog","https://stackoverflow.blog/2025/02/14/solving-the-data-doom-loop/",null,null]" data-gps-track="communitybulletin.click({ priority: 1, position: 0, location: listbytag })">Solving the data doom loop</a> </div> </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <svg aria-hidden="true" class="va-text-top svg-icon iconPencilSm" width="14" height="14" viewBox="0 0 14 14"><path fill="#F1B600" d="m2 10.12 6.37-6.43 1.88 1.88L3.88 12H2z"/><path fill="#E87C87" d="m11.1 1.71 1.13 1.12c.2.2.2.51 0 .71L11.1 4.7 9.21 2.86l1.17-1.15c.2-.2.51-.2.71 0"/></svg> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://stackoverflow.blog/2025/02/18/why-is-it-so-hard-for-companies-to-protect-your-privacy/" class="js-gps-track" data-ga="["community bulletin board","The Overflow Blog","https://stackoverflow.blog/2025/02/18/why-is-it-so-hard-for-companies-to-protect-your-privacy/",null,null]" data-gps-track="communitybulletin.click({ priority: 1, position: 1, location: listbytag })">Why is it so hard for companies to protect your privacy?</a> </div> </li> <li class="s-sidebarwidget--header"> Featured on Meta </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <div class="favicon favicon-stackexchangemeta" title="Meta Stack Exchange"></div> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://meta.stackexchange.com/questions/406399/join-us-for-our-first-community-wide-ama-ask-me-anything-with-stack-overflow-s" class="js-gps-track" title="Join us for our first community-wide AMA (Ask Me Anything) with Stack Overflow’s CEO (and a few others) on February 26, 2025" data-ga="["community bulletin board","Featured on Meta","https://meta.stackexchange.com/questions/406399/join-us-for-our-first-community-wide-ama-ask-me-anything-with-stack-overflow-s",null,null]" data-gps-track="communitybulletin.click({ priority: 3, position: 2, location: listbytag })">Join us for our first community-wide AMA (Ask Me Anything) with Stack...</a> </div> </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <div class="favicon favicon-stackexchangemeta" title="Meta Stack Exchange"></div> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://meta.stackexchange.com/questions/406575/bigbird-and-frog-have-joined-us-as-community-managers" class="js-gps-track" data-ga="["community bulletin board","Featured on Meta","https://meta.stackexchange.com/questions/406575/bigbird-and-frog-have-joined-us-as-community-managers",null,null]" data-gps-track="communitybulletin.click({ priority: 3, position: 3, location: listbytag })">bigbird and Frog have joined us as Community Managers</a> </div> </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <div class="favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://meta.stackoverflow.com/questions/421831/policy-generative-ai-e-g-chatgpt-is-banned" class="js-gps-track" data-ga="["community bulletin board","Featured on Meta","https://meta.stackoverflow.com/questions/421831/policy-generative-ai-e-g-chatgpt-is-banned",null,null]" data-gps-track="communitybulletin.click({ priority: 6, position: 4, location: listbytag })">Policy: Generative AI (e.g., ChatGPT) is banned</a> </div> </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <div class="favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://meta.stackoverflow.com/questions/432989/is-it-better-to-redirect-users-who-attempt-to-perform-actions-they-cant-yet-tak" class="js-gps-track" title="Is it better to redirect users who attempt to perform actions they can't yet take?" data-ga="["community bulletin board","Featured on Meta","https://meta.stackoverflow.com/questions/432989/is-it-better-to-redirect-users-who-attempt-to-perform-actions-they-cant-yet-tak",null,null]" data-gps-track="communitybulletin.click({ priority: 6, position: 5, location: listbytag })">Is it better to redirect users who attempt to perform actions they can't yet...</a> </div> </li> <li class="s-sidebarwidget--item d-flex px16"> <div class="flex--item1 fl-shrink0"> <div class="favicon favicon-stackoverflowmeta" title="Meta Stack Overflow"></div> </div> <div class="flex--item wmn0 ow-break-word"> <a href="https://meta.stackoverflow.com/questions/433034/stacks-editor-development-and-testing" class="js-gps-track" data-ga="["community bulletin board","Featured on Meta","https://meta.stackoverflow.com/questions/433034/stacks-editor-development-and-testing",null,null]" data-gps-track="communitybulletin.click({ priority: 6, position: 6, location: listbytag })">Stacks Editor development and testing</a> </div> </li> </ul> </div> <div class="js-sidebar-zone" style="min-height: 300px;"> <div class="js-zone-container zone-container-sidebar"> <div id="dfp-tsb" class="everyonelovesstackoverflow everyoneloves__top-sidebar"></div> <div class="js-report-ad-button-container " style="width: 300px"></div> </div> <div class="js-zone-container zone-container-sidebar"> <div id="dfp-msb" class="everyonelovesstackoverflow everyoneloves__mid-sidebar"></div> <div class="js-report-ad-button-container " style="width: 300px"></div> </div> <div id="hireme"></div> </div> <div class="module js-gps-related-tags"> <h2 id="h-related-tags" class="fc-black-500">Related Tags</h2> <div data-name="javascript"> <a href="/questions/tagged/sinon+javascript" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon javascript'" aria-label="show questions tagged 'sinon javascript'" rel="tag" data-tag-menu-origin="Unknown">javascript</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">1421</span> </span> </div> <div data-name="node.js"> <a href="/questions/tagged/sinon+node.js" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon node.js'" aria-label="show questions tagged 'sinon node.js'" rel="tag" data-tag-menu-origin="Unknown">node.js</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">1128</span> </span> </div> <div data-name="unit-testing"> <a href="/questions/tagged/sinon+unit-testing" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon unit-testing'" aria-label="show questions tagged 'sinon unit-testing'" rel="tag" data-tag-menu-origin="Unknown">unit-testing</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">1061</span> </span> </div> <div data-name="mocha.js"> <a href="/questions/tagged/sinon+mocha.js" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon mocha.js'" aria-label="show questions tagged 'sinon mocha.js'" rel="tag" data-tag-menu-origin="Unknown">mocha.js</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">914</span> </span> </div> <div data-name="chai"> <a href="/questions/tagged/sinon+chai" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon chai'" aria-label="show questions tagged 'sinon chai'" rel="tag" data-tag-menu-origin="Unknown">chai</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">416</span> </span> </div> <div data-name="testing"> <a href="/questions/tagged/sinon+testing" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon testing'" aria-label="show questions tagged 'sinon testing'" rel="tag" data-tag-menu-origin="Unknown">testing</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">212</span> </span> </div> <div data-name="typescript"> <a href="/questions/tagged/sinon+typescript" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon typescript'" aria-label="show questions tagged 'sinon typescript'" rel="tag" data-tag-menu-origin="Unknown">typescript</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">210</span> </span> </div> <div data-name="sinon-chai"> <a href="/questions/tagged/sinon+sinon-chai" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon sinon-chai'" aria-label="show questions tagged 'sinon sinon-chai'" rel="tag" data-tag-menu-origin="Unknown">sinon-chai</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">205</span> </span> </div> <div data-name="stub"> <a href="/questions/tagged/sinon+stub" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon stub'" aria-label="show questions tagged 'sinon stub'" rel="tag" data-tag-menu-origin="Unknown">stub</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">177</span> </span> </div> <div data-name="reactjs"> <a href="/questions/tagged/sinon+reactjs" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon reactjs'" aria-label="show questions tagged 'sinon reactjs'" rel="tag" data-tag-menu-origin="Unknown">reactjs</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">174</span> </span> </div> <div class="dno js-hidden" data-name="mocking"> <a href="/questions/tagged/sinon+mocking" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon mocking'" aria-label="show questions tagged 'sinon mocking'" rel="tag" data-tag-menu-origin="Unknown">mocking</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">157</span> </span> </div> <div class="dno js-hidden" data-name="jasmine"> <a href="/questions/tagged/sinon+jasmine" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon jasmine'" aria-label="show questions tagged 'sinon jasmine'" rel="tag" data-tag-menu-origin="Unknown">jasmine</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">116</span> </span> </div> <div class="dno js-hidden" data-name="jestjs"> <a href="/questions/tagged/sinon+jestjs" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon jestjs'" aria-label="show questions tagged 'sinon jestjs'" rel="tag" data-tag-menu-origin="Unknown">jestjs</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">111</span> </span> </div> <div class="dno js-hidden" data-name="express"> <a href="/questions/tagged/sinon+express" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon express'" aria-label="show questions tagged 'sinon express'" rel="tag" data-tag-menu-origin="Unknown">express</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">110</span> </span> </div> <div class="dno js-hidden" data-name="angularjs"> <a href="/questions/tagged/sinon+angularjs" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon angularjs'" aria-label="show questions tagged 'sinon angularjs'" rel="tag" data-tag-menu-origin="Unknown">angularjs</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">101</span> </span> </div> <div class="dno js-hidden" data-name="enzyme"> <a href="/questions/tagged/sinon+enzyme" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon enzyme'" aria-label="show questions tagged 'sinon enzyme'" rel="tag" data-tag-menu-origin="Unknown">enzyme</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">96</span> </span> </div> <div class="dno js-hidden" data-name="promise"> <a href="/questions/tagged/sinon+promise" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon promise'" aria-label="show questions tagged 'sinon promise'" rel="tag" data-tag-menu-origin="Unknown">promise</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">89</span> </span> </div> <div class="dno js-hidden" data-name="qunit"> <a href="/questions/tagged/sinon+qunit" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon qunit'" aria-label="show questions tagged 'sinon qunit'" rel="tag" data-tag-menu-origin="Unknown">qunit</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">81</span> </span> </div> <div class="dno js-hidden" data-name="backbone.js"> <a href="/questions/tagged/sinon+backbone.js" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon backbone.js'" aria-label="show questions tagged 'sinon backbone.js'" rel="tag" data-tag-menu-origin="Unknown">backbone.js</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">77</span> </span> </div> <div class="dno js-hidden" data-name="jquery"> <a href="/questions/tagged/sinon+jquery" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon jquery'" aria-label="show questions tagged 'sinon jquery'" rel="tag" data-tag-menu-origin="Unknown">jquery</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">72</span> </span> </div> <div class="dno js-hidden" data-name="mongoose"> <a href="/questions/tagged/sinon+mongoose" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon mongoose'" aria-label="show questions tagged 'sinon mongoose'" rel="tag" data-tag-menu-origin="Unknown">mongoose</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">64</span> </span> </div> <div class="dno js-hidden" data-name="proxyquire"> <a href="/questions/tagged/sinon+proxyquire" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon proxyquire'" aria-label="show questions tagged 'sinon proxyquire'" rel="tag" data-tag-menu-origin="Unknown">proxyquire</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">50</span> </span> </div> <div class="dno js-hidden" data-name="spy"> <a href="/questions/tagged/sinon+spy" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon spy'" aria-label="show questions tagged 'sinon spy'" rel="tag" data-tag-menu-origin="Unknown">spy</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">47</span> </span> </div> <div class="dno js-hidden" data-name="ecmascript-6"> <a href="/questions/tagged/sinon+ecmascript-6" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon ecmascript-6'" aria-label="show questions tagged 'sinon ecmascript-6'" rel="tag" data-tag-menu-origin="Unknown">ecmascript-6</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">46</span> </span> </div> <div class="dno js-hidden" data-name="tdd"> <a href="/questions/tagged/sinon+tdd" class="s-tag post-tag no-tag-menu" title="show questions tagged 'sinon tdd'" aria-label="show questions tagged 'sinon tdd'" rel="tag" data-tag-menu-origin="Unknown">tdd</a> <span class="item-multiplier"><span class="item-multiplier-x">×</span> <span class="item-multiplier-count">44</span> </span> </div> <a href="#" class="show-more js-show-more js-gps-track" data-gps-track="related_tags.click({ item_type:2 })"> more related tags </a> <script> StackExchange.ready(function () { var $div = $('#h-related-tags').parent(); $div.find('.js-show-more').on("click", function () { $div.find('.js-hidden').show(); $(this).remove(); return false; }); }); </script> </div> <div id="hot-network-questions" class="module tex2jax_ignore"> <h4> <a href="https://stackexchange.com/questions?tab=hot" class="js-gps-track s-link s-link__inherit" data-gps-track="posts_hot_network.click({ item_type:1, location:9 })"> Hot Network Questions </a> </h4> <ul> <li > <div class="favicon favicon-english" title="English Language & Usage Stack Exchange"></div><a href="https://english.stackexchange.com/questions/629415/latinate-term-that-means-relating-to-a-niece" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:97 }); posts_hot_network.click({ item_type:2, location:9 })"> Latinate term that means 'relating to a niece' </a> </li> <li > <div class="favicon favicon-stackoverflow" title="Stack Overflow"></div><a href="https://stackoverflow.com/questions/79446335/how-to-compute-expx-2-when-x-is-large" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:1 }); posts_hot_network.click({ item_type:2, location:9 })"> How to compute `exp(x)/2` when `x` is large? </a> </li> <li > <div class="favicon favicon-law" title="Law Stack Exchange"></div><a href="https://law.stackexchange.com/questions/107444/when-to-apply-primacy-and-when-no-contra-legem-in-eu-law" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:617 }); posts_hot_network.click({ item_type:2, location:9 })"> When to apply primacy and when "No Contra Legem" in EU Law? </a> </li> <li > <div class="favicon favicon-politics" title="Politics Stack Exchange"></div><a href="https://politics.stackexchange.com/questions/90625/could-democrats-take-back-the-house-of-representatives-on-april-1-2025-with-upco" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:475 }); posts_hot_network.click({ item_type:2, location:9 })"> Could Democrats take back the House of Representatives on April 1 2025 with upcoming special elections? </a> </li> <li > <div class="favicon favicon-mathoverflow" title="MathOverflow"></div><a href="https://mathoverflow.net/questions/488035/infinitary-logic-at-singular-cardinals" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:504 }); posts_hot_network.click({ item_type:2, location:9 })"> Infinitary logic at singular cardinals </a> </li> <li > <div class="favicon favicon-mathematica" title="Mathematica Stack Exchange"></div><a href="https://mathematica.stackexchange.com/questions/311029/how-to-ask-if-a-result-is-unevaluated-e-g-for-primitiveroot" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:387 }); posts_hot_network.click({ item_type:2, location:9 })"> How to ask if a result is unevaluated? (e.g. for PrimitiveRoot ...) </a> </li> <li > <div class="favicon favicon-law" title="Law Stack Exchange"></div><a href="https://law.stackexchange.com/questions/107440/how-does-the-federal-government-have-jurisdiction-to-charge-luigi-mangione" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:617 }); posts_hot_network.click({ item_type:2, location:9 })"> How does the Federal government have jurisdiction to charge Luigi Mangione? </a> </li> <li > <div class="favicon favicon-puzzling" title="Puzzling Stack Exchange"></div><a href="https://puzzling.stackexchange.com/questions/130556/valentines-confusion" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:559 }); posts_hot_network.click({ item_type:2, location:9 })"> Valentines Confusion </a> </li> <li > <div class="favicon favicon-academia" title="Academia Stack Exchange"></div><a href="https://academia.stackexchange.com/questions/216845/are-there-any-sensible-measure-outside-of-a-lawsuit-to-appeal-admissions-decisio" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:415 }); posts_hot_network.click({ item_type:2, location:9 })"> Are there any sensible measure outside of a lawsuit to appeal admissions decisions at German universities? </a> </li> <li > <div class="favicon favicon-askubuntu" title="Ask Ubuntu"></div><a href="https://askubuntu.com/questions/1541673/ubuntu-server-24-04-zfs-raidz-levels-and-reported-free-space" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:89 }); posts_hot_network.click({ item_type:2, location:9 })"> Ubuntu Server 24.04 ZFS RAIDZ Levels and Reported Free Space </a> </li> <li > <div class="favicon favicon-expatriates" title="Expatriates Stack Exchange"></div><a href="https://expatriates.stackexchange.com/questions/27924/as-a-non-eu-citizen-with-a-french-titre-de-s%c3%a9jour-is-it-possible-to-stay-in-swi" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:546 }); posts_hot_network.click({ item_type:2, location:9 })"> As a non-EU citizen with a French titre de séjour, is it possible to stay in Switzerland exceeding 90 days? </a> </li> <li > <div class="favicon favicon-academia" title="Academia Stack Exchange"></div><a href="https://academia.stackexchange.com/questions/216819/for-a-major-revision-of-my-arxiv-paper-should-i-update-the-existing-submission" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:415 }); posts_hot_network.click({ item_type:2, location:9 })"> For a major revision of my arXiv paper, should I update the existing submission or submit it as a new paper? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-electronics" title="Electrical Engineering Stack Exchange"></div><a href="https://electronics.stackexchange.com/questions/739255/half-bridge-high-side-output-stays-on-when-no-load-is-connected" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:135 }); posts_hot_network.click({ item_type:2, location:9 })"> Half Bridge High Side output stays on when no load is connected </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-academia" title="Academia Stack Exchange"></div><a href="https://academia.stackexchange.com/questions/216835/my-research-ideas-are-solutions-and-i-cant-find-matching-problems" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:415 }); posts_hot_network.click({ item_type:2, location:9 })"> My research ideas are solutions and I can't find matching problems </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-worldbuilding" title="Worldbuilding Stack Exchange"></div><a href="https://worldbuilding.stackexchange.com/questions/264756/using-telekinesis-for-workouts-without-actually-doing-workouts" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:579 }); posts_hot_network.click({ item_type:2, location:9 })"> Using telekinesis for workouts without actually doing workouts? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-latin" title="Latin Language Stack Exchange"></div><a href="https://latin.stackexchange.com/questions/24470/disputing-about-de-gustibus-non-est-disputandum" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:644 }); posts_hot_network.click({ item_type:2, location:9 })"> Disputing about "De gustibus non est disputandum." </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-opensource" title="Open Source Stack Exchange"></div><a href="https://opensource.stackexchange.com/questions/15377/if-a-web-page-s-css-stylesheet-specifies-custom-left-right-margins-that-improv" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:619 }); posts_hot_network.click({ item_type:2, location:9 })"> If a Web page’s CSS stylesheet specifies custom left & right margins that improve its look, does that make a derivative work of the Web browser? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-physics" title="Physics Stack Exchange"></div><a href="https://physics.stackexchange.com/questions/843174/what-would-happen-if-you-stuck-your-hand-into-the-beam-of-an-ion-thruster" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:151 }); posts_hot_network.click({ item_type:2, location:9 })"> What would happen if you stuck your hand into the beam of an ion thruster? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-mathematica" title="Mathematica Stack Exchange"></div><a href="https://mathematica.stackexchange.com/questions/311055/selecting-elements-of-the-list-free-from-the-elements-of-another-list" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:387 }); posts_hot_network.click({ item_type:2, location:9 })"> Selecting elements of the list free from the elements of another list </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-scifi" title="Science Fiction & Fantasy Stack Exchange"></div><a href="https://scifi.stackexchange.com/questions/294956/what-is-the-origin-of-the-word-literjon" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:186 }); posts_hot_network.click({ item_type:2, location:9 })"> What is the origin of the word "literjon"? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-tex" title="TeX - LaTeX Stack Exchange"></div><a href="https://tex.stackexchange.com/questions/737330/how-to-make-all-numbers-in-math-mode-bold" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:85 }); posts_hot_network.click({ item_type:2, location:9 })"> How to make all numbers in math mode bold? </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-mathematica" title="Mathematica Stack Exchange"></div><a href="https://mathematica.stackexchange.com/questions/311051/chess-piece-movement-and-pathfinding-in-grids" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:387 }); posts_hot_network.click({ item_type:2, location:9 })"> Chess Piece Movement and Pathfinding in Grids </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-security" title="Information Security Stack Exchange"></div><a href="https://security.stackexchange.com/questions/280594/password-change-frequency-for-technical-accounts" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:162 }); posts_hot_network.click({ item_type:2, location:9 })"> Password change frequency for technical accounts </a> </li> <li class="dno js-hidden"> <div class="favicon favicon-rpg" title="Role-playing Games Stack Exchange"></div><a href="https://rpg.stackexchange.com/questions/214753/does-this-tremere-doom-wave-actually-work" class="js-gps-track question-hyperlink mb0" data-gps-track="site.switch({ item_type:9, target_site:122 }); posts_hot_network.click({ item_type:2, location:9 })"> Does this Tremere "doom wave" actually work? </a> </li> </ul> <a href="#" class="show-more js-show-more js-gps-track" data-gps-track="posts_hot_network.click({ item_type:3, location:9 })"> more hot questions </a> </div> <div id="feed-link" class="js-feed-link"> <a href="/feeds/tag?tagnames=sinon&sort=newest" title="The 30 newest sinon questions"> <svg aria-hidden="true" class="fc-orange-400 svg-icon iconRss" width="18" height="18" viewBox="0 0 18 18"><path d="M3 1a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 1.5c6.9 0 12.5 5.6 12.5 12.5H13C13 9.55 8.45 5 3 5zm0 5c4.09 0 7.5 3.41 7.5 7.5H8c0-2.72-2.28-5-5-5zm0 5c1.36 0 2.5 1.14 2.5 2.5H3z"/></svg> Newest sinon questions feed </a> </div> <aside class="s-modal js-feed-link-modal" tabindex="-1" role="dialog" aria-labelledby="feed-modal-title" aria-describedby="feed-modal-description" aria-hidden="true"> <div class="s-modal--dialog js-modal-dialog wmx4" role="document" data-controller="se-draggable"> <h1 class="s-modal--header fw-bold js-first-tabbable" id="feed-modal-title" data-se-draggable-target="handle" tabindex="0"> Subscribe to RSS </h1> <div class="d-flex gs4 gsy fd-column"> <div class="flex--item"> <label class="d-block s-label c-default" for="feed-url"> Newest sinon questions feed <p class="s-description mt2" id="feed-modal-description">To subscribe to this RSS feed, copy and paste this URL into your RSS reader.</p> </label> </div> <div class="d-flex ps-relative"> <input class="s-input" type="text" name="feed-url" id="feed-url" readonly="readonly" value="https://stackoverflow.com/feeds/tag?tagnames=sinon&sort=newest" /> <svg aria-hidden="true" class="s-input-icon fc-orange-400 svg-icon iconRss" width="18" height="18" viewBox="0 0 18 18"><path d="M3 1a2 2 0 0 0-2 2v12c0 1.1.9 2 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2zm0 1.5c6.9 0 12.5 5.6 12.5 12.5H13C13 9.55 8.45 5 3 5zm0 5c4.09 0 7.5 3.41 7.5 7.5H8c0-2.72-2.28-5-5-5zm0 5c1.36 0 2.5 1.14 2.5 2.5H3z"/></svg> </div> </div> <a class="s-modal--close s-btn s-btn__muted js-modal-close js-last-tabbable" href="#" aria-label="Close"> <svg aria-hidden="true" class="svg-icon iconClearSm" width="14" height="14" viewBox="0 0 14 14"><path d="M12 3.41 10.59 2 7 5.59 3.41 2 2 3.41 5.59 7 2 10.59 3.41 12 7 8.41 10.59 12 12 10.59 8.41 7z"/></svg> </a> </div> </aside> </div> </div> </div> <script type="text/javascript"> var cam = cam || { opt: {} }; var clcGamLoaderOptions = cam || { opt: {} }; var opt = clcGamLoaderOptions.opt; opt.omni = 'BwoLCN67lIXWmeg9EAUgAigBOgd8c2lub258SAAi4E092ilZYeCW'; opt.refresh = !1; opt.refreshInterval = 90; opt.sf = !0; opt.hb = !1; opt.ll = !0; opt.tlb_position = 0; opt.personalization_consent = !1; opt.targeting_consent = !1; opt.performance_consent = !1; opt.targeting = {Registered:['false'],Reputation:['new'],'so-tag':['sinon'],'tag-reportable':['sinon'],cf_bot_score:'1'}; opt.adReportEnabled = !0; opt.adReportUrl = '/ads/report-ad'; opt.adReportText = 'Report this ad'; opt.adReportFileTypeErrorMessage = 'Please select a PNG or JPG file.'; opt.adReportFileSizeErrorMessage = 'The file must be under 2 MiB.'; opt.adReportErrorText = 'Error uploading ad report.'; opt.adReportThanksText = 'Thanks for your feedback. We’ll review this against our code of conduct and take action if necessary.'; opt.adReportLoginExpiredMessage = 'Your login session has expired, please login and try again.'; opt.adReportLoginErrorMessage = 'An error occurred when loading the report form - please try again'; opt.adReportModalClass = 'js-ad-report'; opt.countryCode = 'SG'; opt.qualtricsSurveyData = '{"isRegistered":"False","repBucket":"new","referrer":"https%3a%2f%2fstackoverflow.com%2fquestions%2ftagged%2fsinon","accountAge":"0"}'; opt.perRequestGuid = '2b8862de-4341-4e69-92ed-d334ad598fca'; opt.responseHash = 'wcNLQXueqdZq3L9ctxmT9XnTeIvK+nUszhT541PpP9Q='; opt.targeting.TargetingConsent = ['False_Passive']; opt.allowAccountTargetingForThisRequest = !1; const urlParams = new URLSearchParams(window.location.search); if (urlParams.has('dfptestads')) { const dfptestads = urlParams.get('dfptestads'); opt.targeting.DfpTestAds = dfptestads; } </script> <script>;(()=>{"use strict";var __webpack_modules__={23:(e,t,s)=>{s.d(t,{Z7:()=>c,eq:()=>l,kG:()=>d});const n="248424177",o=(a=location.pathname,/^\/tags\//.test(a)||/^\/questions\/tagged\//.test(a)?"tag-pages":/^\/discussions\//.test(a)||/^\/beta\/discussions/.test(a)?"discussions":/^\/$/.test(a)||/^\/home/.test(a)?"home-page":/^\/jobs$/.test(a)||/^\/jobs\//.test(a)?"jobs":"question-pages");var a;let i=location.hostname;const r={slots:{lb:[[728,90]],mlb:[[728,90]],smlb:[[728,90]],bmlb:[[728,90]],sb:e=>"dfp-tsb"===e?[[300,250],[300,600]]:[[300,250]],"tag-sponsorship":[[730,135]],"mobile-below-question":[[320,50],[300,250]],msb:[[300,250],[300,600]],"talent-conversion-tracking":[[1,1]],"site-sponsorship":[[230,60]]},ids:{"dfp-tlb":"lb","dfp-mlb":"mlb","dfp-smlb":"smlb","dfp-bmlb":"bmlb","dfp-tsb":"sb","dfp-isb":"sb","dfp-tag":"tag-sponsorship","dfp-msb":"msb","dfp-sspon":"site-sponsorship","dfp-m-aq":"mobile-below-question"},idsToExcludeFromAdReports:["dfp-sspon"]};function d(){return Object.keys(r.ids)}function l(e){return r.idsToExcludeFromAdReports.indexOf(e)<0}function c(e,t){var s=e.split("_")[0];const a=r.ids[s];let d=r.slots[a];return"function"==typeof d&&(d=d(s)),{path:`/${n}/${t||i}/${a}/${o}`,sizes:d,zone:a}}},865:(e,t,s)=>{function n(e){return"string"==typeof e?document.getElementById(e):e}function o(e){return!!(e=n(e))&&"none"===getComputedStyle(e).display}function a(e){return!o(e)}function i(e){return!!e}function r(e){return/^\s*$/.test(n(e).innerHTML)}function d(e){const{style:t}=e;t.height=t.maxHeight=t.minHeight="auto",t.display="none"}function l(e){const{style:t}=e;t.height=t.maxHeight=t.minHeight="auto",t.display="none",[].forEach.call(e.children,l)}function c(e){const{style:t}=e;t.height=t.maxHeight=t.minHeight="auto",t.removeProperty("display")}function g(e){const t=document.createElement("script");t.src=e,document.body.appendChild(t)}function p(e){return s=e,(t=[]).push=function(e){return s(),delete this.push,this.push(e)},t;var t,s}function h(e){let t="function"==typeof HTMLTemplateElement;var s=document.createElement(t?"template":"div");return e=e.trim(),s.innerHTML=e,t?s.content.firstChild:s.firstChild}s.d(t,{$Z:()=>c,Bv:()=>h,Gx:()=>g,Nj:()=>n,QZ:()=>p,cf:()=>d,pn:()=>a,wo:()=>l,xb:()=>r,xj:()=>o,yb:()=>i})},763:(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{t:()=>AdReports});var _common_helper__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(865),_console__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(276),_ad_units__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(23);class AdReports{constructor(e,t){if(this.googletag=e,this.cam=t,this.allowedFileTypes=["image/png","image/jpg","image/jpeg"],this.ignoreValidation=!1,_console__WEBPACK_IMPORTED_MODULE_1__.cM("Ad reporting init"),this.cam=t,this.callOnButtonClick=e=>this.onButtonClick(e),this.googletag.pubads().addEventListener("slotRenderEnded",e=>this.handleSlotRendered(e)),Array.isArray(t.slotsRenderedEvents)){_console__WEBPACK_IMPORTED_MODULE_1__.cM("Adding report button to "+t.slotsRenderedEvents.length+" events that have transpired");for(var s=0;s<t.slotsRenderedEvents.length;s++)this.handleSlotRendered(t.slotsRenderedEvents[s])}}handleSlotRendered(e){if(e&&e.slot&&!e.isEmpty&&(e.creativeId||e.lineItemId||!e.isEmpty)){var t=e.slot.getSlotElementId();if(t){var s=document.getElementById(t);if(s)if((0,_ad_units__WEBPACK_IMPORTED_MODULE_0__.eq)(t)){var n=s?.closest(".js-zone-container")?.querySelector(".js-report-ad-button-container");n?(n.innerHTML="",n.append(this.createButton(e)),n.style.height="24px",_console__WEBPACK_IMPORTED_MODULE_1__.cM("Added report button to the bottom of "+t)):_console__WEBPACK_IMPORTED_MODULE_1__.cM("Ad report button not found, may be intentional, element: "+t)}else _console__WEBPACK_IMPORTED_MODULE_1__.cM("Not adding report button to the bottom of "+t+": shouldHaveReportButton = false");else _console__WEBPACK_IMPORTED_MODULE_1__.cM("Not adding report button to the bottom of "+t+": resolved invalid adUnit element")}else _console__WEBPACK_IMPORTED_MODULE_1__.cM("Not adding report button to the bottom of element: invalid adUnitElementId")}else _console__WEBPACK_IMPORTED_MODULE_1__.cM("Not adding report button to the bottom of element: invalid SlotRenderEndedEvent")}async onButtonClick(e){e.preventDefault();let t=e.target;const s=t.dataset.modalUrl,n=t.dataset.googleEventData;return await this.loadModal(s,t,n),!1}createButton(e){let t=document.createElement("button");var s=JSON.stringify(e);return t.dataset.googleEventData=s,t.dataset.modalUrl=this.cam.opt.adReportUrl,t.dataset.adUnit=e.slot.getSlotElementId(),t.classList.add("js-report-ad","s-btn","s-btn__link","fs-fine","mt2","float-right"),t.append(document.createTextNode(this.cam.opt.adReportText)),t.removeEventListener("click",this.callOnButtonClick),t.addEventListener("click",this.callOnButtonClick),t}async loadModal(url,$link,googleEventData){try{await window.StackExchange.helpers.loadModal(url,{returnElements:window.$($link)}),this.initForm(googleEventData)}catch(e){var message="",response=e.responseText?eval(`(${e.responseText})`):null;message=response&&response.isLoggedOut?this.cam.opt.adReportLoginExpiredMessage:this.cam.opt.adReportLoginErrorMessage,window.StackExchange.helpers.showToast(message,{type:"danger"})}}removeModal(){window.StackExchange.helpers.closePopups(document.querySelectorAll("."+this.cam.opt.adReportModalClass),"dismiss")}initForm(e,t=!1){this.ignoreValidation=t,this.$form=document.querySelector(".js-ad-report-form"),this.$googleEventData=this.$form.querySelector(".js-json-data"),this.$adReportReasons=this.$form.querySelectorAll(".js-ad-report-reason"),this.$adReportReasonOther=this.$form.querySelector(".js-ad-report-reason-other"),this.$fileUploaderInput=this.$form.querySelector(".js-file-uploader-input"),this.$imageUploader=this.$form.querySelector(".js-image-uploader"),this.$clearImageUpload=this.$form.querySelector(".js-clear-image-upload"),this.$imageUploaderText=this.$form.querySelector(".js-image-uploader-text"),this.$imageUploaderPreview=this.$form.querySelector(".js-image-uploader-preview"),this.$fileErrorMessage=this.$form.querySelector(".js-file-error");const s=this.$form.querySelector(".js-drag-drop-enabled"),n=this.$form.querySelector(".js-drag-drop-disabled");this.$googleEventData.value=e,this.$adReportReasons.forEach((e,t)=>e.addEventListener("change",e=>{this.$adReportReasonOther.classList.toggle("d-none","3"!==e.target.value)})),this.$fileUploaderInput.addEventListener("change",()=>{this.validateFileInput()&&this.updateImagePreview(this.$fileUploaderInput.files)}),this.$clearImageUpload.addEventListener("click",e=>{e.preventDefault(),this.clearImageUpload()});try{this.$fileUploaderInput[0].value="",this.$imageUploader.addEventListener("dragenter dragover dragleave drop",this.preventDefaults),this.$imageUploader.addEventListener("dragenter dragover",this.handleDragStart),this.$imageUploader.addEventListener("dragleave drop",this.handleDragEnd),this.$imageUploader.addEventListener("drop",this.handleDrop)}catch(e){s.classList.add("d-none"),n.classList.remove("d-none")}this.$form.removeEventListener("",this.handleDragEnd),this.$form.addEventListener("submit",async e=>(e.preventDefault(),this.submitForm(),!1))}clearImageUpload(){this.$fileUploaderInput.value="",this.$imageUploaderPreview.setAttribute("src",""),this.$imageUploaderPreview.classList.add("d-none"),this.$clearImageUpload.classList.add("d-none"),this.$imageUploaderText.classList.remove("d-none"),this.$imageUploader.classList.add("p16","ba","bas-dashed","bc-black-100")}preventDefaults(e){e.preventDefault(),e.stopPropagation()}handleDragStart(e){this.$imageUploader.classList.remove("bas-dashed"),this.$imageUploader.classList.add("bas-solid","bc-black-100")}handleDragEnd(e){this.$imageUploader.classList.remove("bas-solid","bc-black-100"),this.$imageUploader.classList.add("bas-dashed")}handleDrop(e){var t=e.originalEvent.dataTransfer.files;FileReader&&t&&1===t.length&&(this.$fileUploaderInput.files=t,this.validateFileInput()&&this.updateImagePreview(t))}setError(e){this.$fileErrorMessage.parentElement.classList.toggle("has-error",e)}updateImagePreview(e){this.$imageUploader.classList.remove("p16","ba","bas-dashed","bc-black-100"),this.$clearImageUpload.classList.remove("d-none"),this.$imageUploaderText.classList.add("d-none");var t=new FileReader;t.onload=e=>{null!=e.target&&(this.$imageUploaderPreview.setAttribute("src",e.target.result),this.$imageUploaderPreview.classList.remove("d-none"))},t.readAsDataURL(e[0])}validateFileInput(){if(this.ignoreValidation)return!0;const e=this.cam.opt.adReportFileTypeErrorMessage,t=this.cam.opt.adReportFileSizeErrorMessage;if(null==this.$fileUploaderInput.files)return!1;var s=this.$fileUploaderInput.files[0];return null==s?(this.setError(!0),!1):this.allowedFileTypes.indexOf(s.type)<0?(this.$fileErrorMessage.textContent=e,this.$fileErrorMessage.classList.remove("d-none"),this.setError(!0),!1):s.size>2097152?(this.$fileErrorMessage.textContent=t,this.$fileErrorMessage.classList.remove("d-none"),this.setError(!0),!1):(this.$fileErrorMessage.classList.add("d-none"),this.setError(!1),!0)}async gatherDiagnosticInfo(){return{BrowserVersion:await this.getBrowserVersion()}}getElementSource(e){return e.outerHTML}getNestedIFrameElement(e){var t=e.querySelector("iframe");return t.contentDocument?t.contentDocument.documentElement:t.contentWindow.document.documentElement}async getBrowserVersion(){return await navigator.userAgentData.getHighEntropyValues(["fullVersionList"]).then(e=>JSON.stringify(e.fullVersionList))}async submitForm(){if(!this.validateFileInput())return!1;this.$form.querySelector("[type=submit]").setAttribute("disabled","true");var e=JSON.parse(this.$googleEventData.value||"{}");e.Reason=parseInt(this.$form.querySelector(".js-ad-report-reason:checked").value,10),e.Description=this.$adReportReasonOther.value,this.$googleEventData.value=JSON.stringify(e);var t=new FormData(this.$form);if("1"===t.get("shareDiagnosticInfo")){var s=await this.gatherDiagnosticInfo();Object.keys(s).forEach(e=>t.append(e,s[e]))}try{const e=await window.fetch(this.$form.getAttribute("action"),{method:this.$form.getAttribute("method"),body:t,cache:"no-cache"}),s=e.headers.get("content-type")||"",o=await e.text();if(!e.ok)throw new Error("response not valid");if(0===s.indexOf("text/html")){var n=(0,_common_helper__WEBPACK_IMPORTED_MODULE_2__.Bv)(o);const e=n?n.querySelector(".js-modal-content"):null;if(_console__WEBPACK_IMPORTED_MODULE_1__.cM("$popupContent"),_console__WEBPACK_IMPORTED_MODULE_1__.cM(e),!e)throw new Error(`Could not find .js-modal-content in response from ${this.$form.getAttribute("action")}`);document.querySelector(".js-modal-content").replaceWith(e)}else window.StackExchange.helpers.showToast(this.cam.opt.adReportThanksText,{type:"success"}),this.removeModal()}catch(e){window.StackExchange.helpers.showToast(this.cam.opt.adReportErrorText,{type:"danger"})}finally{let e=this.$form.querySelector("[type=submit]");e&&e.removeAttribute("disabled")}}}},276:(e,t,s)=>{function n(...e){}function o(...e){}s.d(t,{cM:()=>n,vU:()=>o})}},__webpack_module_cache__={};function __webpack_require__(e){var t=__webpack_module_cache__[e];if(void 0!==t)return t.exports;var s=__webpack_module_cache__[e]={exports:{}};return __webpack_modules__[e](s,s.exports,__webpack_require__),s.exports}__webpack_require__.d=(e,t)=>{for(var s in t)__webpack_require__.o(t,s)&&!__webpack_require__.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:t[s]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var __webpack_exports__={};(()=>{var e=__webpack_require__(276),t=(e=>(e[e.Above=0]="Above",e[e.Below=1]="Below",e))(t||{});const s=Object.assign({},{"lib":"https://clc.stackoverflow.com/Content/bundles/js/gam_loader_script.bundle.741.5deb8dc1a671bfb1646b.js?v=7178a92a336c","style":null,"u":null,"wa":true,"kt":2000,"tto":true,"h":"clc.stackoverflow.com","allowed":"^(((talent\\.)?stackoverflow)|(blog\\.codinghorror)|(.*\\.googlesyndication)|(serverfault|askubuntu|superuser)|([^\\.]+\\.stackexchange))\\.com$","wv":true,"al":false,"abd":true,"cpa_liid":[5882654614],"cpa_cid":[138377597667],"dp":false,"tgt_to":1000,"tgt_u":"https://clc.stackoverflow.com/get-user-acct-tgt","tgt_e":true,"tgt_p":100,"dv_enabled":false,"upo":""});var n=__webpack_require__(23),o=__webpack_require__(865),a=__webpack_require__(763);class i{constructor(t,s){this.googletag=t,this.interval=s,e.cM("Ad refresh init. interval: "+s),this.googletag.pubads().addEventListener("impressionViewable",e=>this.onImpressionViewable(e)),e.cM("done enabling ad refresh")}onImpressionViewable(t){var s=t.slot;e.cM("ad refresh - slot "+s.getSlotElementId()+" is viewable, initializing refresh"),this.scheduleRefresh(s)}scheduleRefresh(e){setTimeout(()=>this.refreshAdSlot(e),1e3*this.interval)}static refreshMyAd(t,s){let n=t.pubads().getSlots().find(e=>e.getSlotElementId()===s);n&&(e.cM("refreshMyAd - refreshing ad slot "+s),t.pubads().refresh([n]))}static removeMyAd(t,s){let n=t.pubads().getSlots().find(e=>e.getSlotElementId()===s);n&&(e.cM("removeMyAd - destroying ad slot "+s),t.destroySlots([n]))}refreshAdSlot(t){var s=t.getSlotElementId();this.isElementVisibleInBrowser(s)?(e.cM("refreshing ad slot "+s),googletag.pubads().refresh([t])):(e.cM("refresh skipped this time; ad slot not viewable:"+s),this.scheduleRefresh(t))}isElementVisibleInBrowser(e){var t=document.getElementById(e);if(null!==t){var s=t.getBoundingClientRect();if(s.top>=0&&s.left>=0&&s.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&s.right<=(window.innerWidth||document.documentElement.clientWidth))return!0}return!1}}var r=(e=>(e.Off="Off",e.PreSurvey="PreSurvey",e.Collect="Collect",e.PostSurvey="PostSurvey",e))(r||{});class d{constructor(e,t){this.lineItemImpressions=[],this.surveysIdsCompleted=[],this.lineItemImpressions=e,this.surveysIdsCompleted=t}addImpression(e,t){let s={brandId:e,lineItemId:t,timestamp:new Date};this.lineItemImpressions.push(s)}addBrandSurveyCompleted(e){-1===this.surveysIdsCompleted.indexOf(e)&&this.surveysIdsCompleted.push(e)}getTotalBrandImpressions(){let e=new Map;for(let t of this.lineItemImpressions)if(e.has(t.brandId)){let s=e.get(t.brandId);e.set(t.brandId,s+1)}else e.set(t.brandId,1);return e}getBrandLineItemImpressions(e){let t={};for(let s of this.lineItemImpressions)if(s.brandId==e)if(void 0!==t[s.lineItemId]){let e=t[s.lineItemId];t[s.lineItemId]=e+1}else t[s.lineItemId]=1;return t}}class l{constructor(){this.surveyEngagementLocalStorageKey="clc-survey-engagement"}getBrandSurveyEngagement(){let e=localStorage.getItem(this.surveyEngagementLocalStorageKey);if(null===e)return new d([],[]);let t=JSON.parse(e);return new d(t.lineItemImpressions,t.surveysIdsCompleted)}saveBrandSurveyEngagement(e){let t=JSON.stringify(e);localStorage.setItem(this.surveyEngagementLocalStorageKey,t)}}class c{constructor(){this.surveyRepository=new l}getBrandSurveyEngagement(){return this.surveyRepository.getBrandSurveyEngagement()}recordImpression(e,t){let s=this.getBrandSurveyEngagement();s.addImpression(e,t),this.surveyRepository.saveBrandSurveyEngagement(s)}recordBrandSurveyCompleted(e){let t=this.getBrandSurveyEngagement();t.addBrandSurveyCompleted(e),this.surveyRepository.saveBrandSurveyEngagement(t)}}class g{constructor(t,s){this.googletag=t,this.brandSettings=s,this.brandSlotMap=new Map,this.brandSurveyEngagementService=new c,e.cM("Brand Survey init: "+JSON.stringify(s)),void 0!==s?(this.googletag.pubads().addEventListener("slotRenderEnded",e=>this.handleSlotRendered(e)),this.googletag.pubads().addEventListener("impressionViewable",e=>this.onImpressionViewable(e)),e.cM("done enabling Brand Survey")):e.cM("Brand Survey init: brandSettings is undefined, not initializing")}handleSlotRendered(t){e.cM("Brand Survey - slot rendered - slot:"+JSON.stringify(t.slot.getSlotElementId())+" lineItem: "+t.lineItemId);let s=this.findItemWithId(t.lineItemId);if(null===s||s.mode!==r.Collect)this.brandSlotMap.delete(t.slot.getSlotElementId());else{let e={brandId:s.brandId,lineItemId:t.lineItemId};this.brandSlotMap.set(t.slot.getSlotElementId(),e)}}onImpressionViewable(t){let s=t.slot;if(e.cM("ad - Brand Survey - impression viewable. Details: "+JSON.stringify(s.getSlotElementId())),e.cM("ad - Brand Survey - slot "+s.getSlotElementId()+" is viewable"),this.brandSlotMap.has(s.getSlotElementId())){let t=this.brandSlotMap.get(s.getSlotElementId());e.cM("Brand Survey - brand "+t.brandId+" is viewable"),this.recordImpression(this.brandSlotMap.get(s.getSlotElementId()))}}recordImpression(t){e.cM("ad - Brand Survey - recording impression for brand "+t.brandId),this.brandSurveyEngagementService.recordImpression(t.brandId,t.lineItemId)}findItemWithId(t){return e.cM("brand settings: "+JSON.stringify(this.brandSettings)),this.brandSettings.find(e=>e.lineItemIds.includes(t))||null}}const p="response-brand-survey-submit|",h="request-brand-survey-metadata|",m="record-metric-on-server|",u="request-dsp-tags",f="response-dsp-tags|";class _{static refreshAdIfBrandSurveyIsDuplicated(e,t,s){if(this.alreadyCompletedThisBrandSurvey(t)){var n=document.getElementById(s).closest(".js-zone-container");i.removeMyAd(e,s),n&&n.remove()}}static alreadyCompletedThisBrandSurvey(e){return(new c).getBrandSurveyEngagement().surveysIdsCompleted.includes(e)}}window.cam=new class{constructor(t=null){if(this.gptImported=!1,this.slotsRenderedEvents=[],this.collapsed={},e.cM("constructor"),this.clc_options=s,window.clcGamLoaderOptions)Object.assign(this,window.clcGamLoaderOptions);else if(void 0===this.opt){let e=window.opt;e&&(this.opt=e)}}init(){if(e.cM("init"),void 0===this.opt)throw new Error("opt not set, required by GAM Loader");e.cM("init brand survey service"),this.getUserMetaPromise=this.getUserMeta(),e.cM("setup message handler"),window.addEventListener("message",e=>{this.onmessage(e)})}handleSlotRenderedNoAdReport(){if(googletag.pubads().addEventListener("slotRenderEnded",e=>this.applyExtraMarginBottom(e)),Array.isArray(this.slotsRenderedEvents))for(var e=0;e<this.slotsRenderedEvents.length;e++)this.applyExtraMarginBottom(this.slotsRenderedEvents[e])}onmessage(t){let s="omni";if(t.data&&("string"==typeof t.data||t.data instanceof String))if(0===t.data.indexOf("get-omni-")){e.cM("Recevied get-omni message, sending back omni");var n=t.source,a=this.opt.omni,i="string"==typeof a?a:"";n.postMessage([s,i,this.opt.perRequestGuid].join("|"),"*")}else if(0===t.data.indexOf("collapse-")){e.cM("Recevied collapse message, collapse ad iframe"),e.cM(t);for(var r=t.source.window,d=document.getElementsByTagName("IFRAME"),l=0;l<d.length;l++){var g=d[l];if(g.contentWindow==r)return void(0,o.wo)(g.parentElement.parentElement.parentElement)}}else if(0===t.data.indexOf("resize|")){e.cM("Recevied resize message, resize ad iframe"),e.cM(t);let s=this._getFrameByEvent(t),n=t.data.indexOf("|")+1,o=t.data.slice(n),a=parseFloat(o)+.5;e.cM("New iframe height "+a),s.height=a.toString(),s.parentElement.style.height=a.toString()+"px"}else if(0===t.data.indexOf("getmarkup|")){let s=t.data.indexOf("|")+1,n=t.data.slice(s);e.cM("Recevied get markup message: "+n);let o=this._getFrameByEvent(t).closest(".everyonelovesstackoverflow");const a=document.createElement("script");a.dataset.adZoneId=o.id,a.src=n,document.body.appendChild(a)}else if(0===t.data.indexOf("window-location|")){let s=t.data.indexOf("|")+1,n=t.data.slice(s);e.cM("Recevied window location message: "+n),n.startsWith("/")||(n="/"+n),window.open(window.location.protocol+"//"+window.location.host+n,"_blank")}else if(0===t.data.indexOf("request-brand-survey-submit|")){let s=t.data.split("|"),n=s[1],o=s[2],a=s[3],i=JSON.parse(a);e.cM(n),e.cM(o),e.cM(a),e.cM("Received brand survey "+n+" response message: "+o);var v=new FormData;for(var b in i)v.append(b,i[b]);let r=this._getFrameByEvent(t);if(_.alreadyCompletedThisBrandSurvey(+n))return e.cM("Already completed this brand survey. Not submitting duplicate to server."),void r.contentWindow.postMessage("response-brand-survey-submit-duplicate|","*");e.cM("Send the brand survey to the server"),fetch(o,{method:"POST",body:v}).then(e=>e.json()).then(e=>r.contentWindow.postMessage({messageType:p},"*")).catch(e=>r.contentWindow.postMessage({messageType:p},"*"))}else if(0===t.data.indexOf("brand-survey-completed-store|")){let s=t.data.split("|"),n=(s[1],s[2]);if(e.cM("Received brand survey completed store message for survey ID "+n),_.alreadyCompletedThisBrandSurvey(+n))return void e.cM("Already completed this brand survey. Not recording duplicate locally.");e.cM("Record brand survey completion locally"),(new c).recordBrandSurveyCompleted(+n)}else if(0===t.data.indexOf(h)){let s=t.data.split("|"),n=s[1],o=s[2];e.cM("Received message: "+h+" with Brand Survey ID "+o);let a=(new c).getBrandSurveyEngagement().getBrandLineItemImpressions(+n),i=JSON.stringify(a),r=this._getFrameByEvent(t);e.cM("sending impression data: "+i),r.contentWindow.postMessage("response-brand-survey-metadata|"+this.opt.responseHash+"|"+this.opt.perRequestGuid+"|"+i+"|"+this.opt.countryCode+"|"+this.opt.qualtricsSurveyData,"*")}else if(0===t.data.indexOf("refresh-if-duplicate-brand-survey|")){let e=t.data.split("|")[1],s=this.getSlotElementIdByEvent(t);_.refreshAdIfBrandSurveyIsDuplicated(googletag,+e,s)}else if(0===t.data.indexOf(m)){e.cM("Received message: "+m+" with args: "+t.data);let s=t.data.split("|"),n=s[1],o=s[2],a=s[3],i=s[4],r=new FormData;r.append("brandSurveyId",a.toString()),r.append("responseHash",this.opt.responseHash),r.append("perRequestGuid",this.opt.perRequestGuid),r.append("questionNumber",n.toString()),r.append("metricType",i.toString()),fetch(o,{method:"POST",body:r}).then(e=>e.ok).catch(t=>{e.cM("SendMetricToServer: Error sending metric to server: "+t)})}else if(0===t.data.indexOf(u)){e.cM("Received message: "+u+" with args: "+t.data);let s=this._getFrameByEvent(t);if(!this.opt.targeting["so-tag"])return void s.contentWindow.postMessage(f,"*");const n=this.opt.targeting["so-tag"].join(",");e.cM("sending targeting tags: "+n),s.contentWindow.postMessage(f+n,"*")}else e.cM("Received unhandled message")}getSlotElementIdByEvent(e){let t=this._getFrameByEvent(e),s=t.parentElement?.parentElement?.id;return s||""}_getFrameByEvent(e){return Array.from(document.getElementsByTagName("iframe")).filter(t=>t.contentWindow===e.source)[0]}classifyZoneIds(e){const t=e.map(o.Nj).filter(o.yb);return{eligible:t.filter(o.xb).filter(o.pn),ineligible:t.filter(o.xj)}}applyExtraMarginBottom(t){if(t&&t.slot&&!t.isEmpty&&(t.creativeId||t.lineItemId||!t.isEmpty)){var s=t.slot.getSlotElementId();if(s){var o=document.getElementById(s);if(o)if((0,n.eq)(s)){var a=o?.closest(".js-zone-container");a.style.marginBottom="24px",e.cM("Applied extra margin to the bottom of "+s)}else e.cM("Not applying extra margin to the bottom of "+s+": shouldHaveReportButton = false");else e.cM("Not applying extra margin to the bottom of "+s+": resolved invalid adUnit element")}else e.cM("Not applying extra margin to the bottom of element: invalid adUnitElementId")}else e.cM("Not applying extra margin to the bottom of element: invalid SlotRenderEndedEvent")}async load(s=(0,n.kG)()){const r=this.opt.tlb_position===t.Above?["dfp-mlb","dfp-smlb"]:["dfp-mlb","dfp-smlb","dfp-tlb"];if(!this.isGptReady())return e.cM("Initializing..."),this.initGpt(),void googletag.cmd.push(()=>this.load(s));this.opt.adReportEnabled?(e.cM("Ad reporting enabled"),this.adReports=new a.t(googletag,this)):(e.cM("Ad reporting not enabled"),this.handleSlotRenderedNoAdReport()),this.opt.refresh?(e.cM("Ad refresh enabled"),this.adRefresh=new i(googletag,this.opt.refreshInterval)):e.cM("Ad refresh not enabled"),this.opt.brandSurveyEnabled&&(e.cM("Brand Survey enabled"),this.brandSurvey=new g(googletag,this.opt.brandSurveySettings)),e.cM("Attempting to load ads into ids: ",s);const{eligible:d,ineligible:l}=this.classifyZoneIds(s);if(this.initDebugPanel(googletag,d.concat(l)),d.forEach(e=>(0,o.cf)(e)),l.forEach(o.wo),0===d.length)return void e.cM("Found no ad ids on page");e.cM("Eligible ids:",d),this.opt.abd&&this.appendAdblockDetector();var c=googletag.pubads().getSlots();if(c){var p=c.filter(e=>s.indexOf(e.getSlotElementId())>=0);googletag.destroySlots(p)}this.opt.sf&&(googletag.pubads().setForceSafeFrame(!0),googletag.pubads().setSafeFrameConfig({allowOverlayExpansion:!0,allowPushExpansion:!0,sandbox:!0})),e.cM("Targeting consent: Checking...");let h=!1,m=!1;void 0!==this.opt.targeting_consent&&(m=!0,e.cM("Targeting consent: Parameter set"),e.cM("Targeting consent: Consent given? ",this.opt.targeting_consent),h=this.opt.targeting_consent),void 0!==this.opt.personalization_consent&&(e.cM("Personalization consent: Parameter set"),e.cM("Personalization consent: Consent given? ",this.opt.personalization_consent),h=h&&this.opt.personalization_consent),h=h&&m,this.setPrivacySettings(h),this.opt.ll||googletag.pubads().enableSingleRequest(),cam.sreEvent||(googletag.pubads().addEventListener("slotRenderEnded",e=>this.onSlotRendered(e)),cam.sreEvent=!0),await this.setTargeting();var u=d.filter(e=>!this.opt.ll||r.indexOf(e.id)<0),f=d.filter(e=>!!this.opt.ll&&r.indexOf(e.id)>=0);e.cM("Up front ids:",u),e.cM("Lazy loaded ids:",f),u.forEach(t=>{e.cM(`Defining ad for element ${t.id}`),this.defineSlot(t.id,googletag),t.setAttribute("data-dfp-zone","true")}),googletag.enableServices(),u.forEach(t=>{e.cM(`Displaying ad for element ${t.id}`),this.clc_options.dv_enabled?window.onDvtagReady(function(){googletag.display(t.id)}):googletag.cmd.push(()=>googletag.display(t.id))}),this.opt.ll&&(e.cM("Enabling lazy loading for GAM"),googletag.pubads().enableLazyLoad({fetchMarginPercent:0,renderMarginPercent:0}),e.cM("Setting up lazy loaded ad units"),f.forEach(t=>{e.cM(`Lazy loading - Defining Slot ${t.id}`),this.defineSlot(t.id,googletag)}),f.forEach(t=>{e.cM(`Lazy loading - Displaying ad for element ${t.id}`),this.clc_options.dv_enabled?window.onDvtagReady(function(){googletag.display(t.id)}):googletag.cmd.push(()=>googletag.display(t.id))}))}setPrivacySettings(e){e||googletag.pubads().setPrivacySettings({nonPersonalizedAds:!0})}async setTargeting(){if(!googletag)throw new Error("googletag not defined");let t=this.opt.targeting;if(!t)throw new Error("Targeting not defined (is "+typeof t+")");Object.keys(t).forEach(s=>{e.cM(`-> targeting - ${s}: ${t[s]}`),googletag.pubads().setTargeting(s,t[s])});let s=!1;if(void 0!==this.opt.targeting_consent&&(s=this.opt.targeting_consent),s){let t=(new c).getBrandSurveyEngagement();if(t.getTotalBrandImpressions().forEach((t,s)=>{e.cM(`-> targeting - BrandImpressions: ${s}: ${t}`),googletag.pubads().setTargeting("brand_"+s.toString()+"_impressions",t.toString())}),t.surveysIdsCompleted.forEach(t=>{e.cM(`-> targeting - SurveysTaken: ${t}`),googletag.pubads().setTargeting("survey_"+t+"_taken","true")}),this.clc_options.tgt_e&&this.getUserMetaPromise){let t=await this.getUserMetaPromise;t&&t.tgt_acct?(e.cM("-> targeting - User Account: "+t.tgt_acct),googletag.pubads().setTargeting("user-acct",t.tgt_acct.company_name),googletag.pubads().setTargeting("user_acct_top",t.tgt_acct.company_name),googletag.pubads().setTargeting("user_industry",t.tgt_acct.industry),googletag.pubads().setTargeting("user_employee_count",t.tgt_acct.employee_range)):e.cM("-> targeting - User Account: Not Found"),t&&Object.prototype.hasOwnProperty.call(t,"is_high_rep_earner")?(e.cM("-> targeting - High Rep Earner: "+t.is_high_rep_earner),googletag.pubads().setTargeting("IsHighRepEarner",t.is_high_rep_earner?"true":"false")):e.cM("-> targeting - High Rep Earner: not found")}if(localStorage){e.cM('Checking local storage for "jobs-last-clicked" key.');let t=localStorage.getItem("jobs-last-clicked")?"true":"false";e.cM(`-> targeting - jobs_clicked: ${t}`),googletag.pubads().setTargeting("jobs_clicked",t)}}}appendAdblockDetector(){const e=document.createElement("div");e.className="adsbox",e.id="clc-abd",e.style.position="absolute",e.style.pointerEvents="none",e.innerHTML=" ",document.body.appendChild(e)}onSlotRendered(s){try{const i=s.slot.getSlotElementId();let r=[];i||r.push("id=0");const d=document.getElementById(i);if(i&&!d&&r.push("el=0"),0!==r.length)return void this.stalled(r.join("&"));const{path:l,sizes:c,zone:g}=(0,n.Z7)(i,this.clc_options.upo);if(this.collapsed[g]&&s.isEmpty)return e.cM(`No line item for the element #${d.id}... collapsing.`),void(0,o.wo)(d);if(this.slotsRenderedEvents.push(s),s.lineItemId||s.creativeId||!s.isEmpty){e.cM(`Rendered ad for element #${d.id} [line item #${s.lineItemId}]`),e.cM(s);var a=d.parentElement;if(a.classList.contains("js-zone-container")){switch((0,o.cf)(a),i){case"dfp-tlb":this.opt.tlb_position===t.Above?a.classList.add("mb8"):a.classList.add("mt16");break;case"dfp-tag":a.classList.add("mb8");break;case"dfp-msb":a.classList.add("mt16");break;case"dfp-mlb":case"dfp-smlb":case"dfp-bmlb":a.classList.add("my8");break;case"dfp-isb":a.classList.add("mt24");break;case"dfp-m-aq":a.classList.add("my12"),a.classList.add("mx-auto")}(0,o.$Z)(a),(0,o.$Z)(d)}else e.cM(`No ad for element #${d.id}, collapsing`),e.cM(s),(0,o.wo)(d)}}catch(t){e.cM("Exception thrown onSlotRendered"),e.cM(t),this.stalled("e=1")}}stalled(e){(new Image).src=`https://${this.clc_options.h}/stalled.gif?${e}`}defineSlot(t,s){"dfp-isb"===t&&(e.cM("-> targeting - Sidebar: Inline"),s.pubads().setTargeting("Sidebar",["Inline"])),"dfp-tsb"===t&&(e.cM("-> targeting - Sidebar: Right"),s.pubads().setTargeting("Sidebar",["Right"]));const{path:o,sizes:a,zone:i}=(0,n.Z7)(t,this.clc_options.upo);e.cM(`Defining slot for ${t}: ${o}, sizes: ${JSON.stringify(a)}`),s.defineSlot(o,a,t).addService(s.pubads())}importGptLibrary(){this.gptImported||(this.gptImported=!0,void 0===this.opt.targeting_consent||this.opt.targeting_consent?(0,o.Gx)("https://securepubads.g.doubleclick.net/tag/js/gpt.js"):(0,o.Gx)("https://pagead2.googlesyndication.com/tag/js/gpt.js"))}importDvLibrary(){this.clc_options.dv_enabled&&(e.cM("Adding DoubleVerify library"),(0,o.Gx)("https://pub.doubleverify.com/dvtag/21569774/DV1289064/pub.js"),e.cM("Adding DoubleVerify onDvtagReady handler"),window.onDvtagReady=function(t,s=750){e.cM("DoubleVerify onDvtagReady called"),window.dvtag=window.dvtag||{},dvtag.cmd=dvtag.cmd||[];const n={callback:t,timeout:s,timestamp:(new Date).getTime()};dvtag.cmd.push(function(){dvtag.queueAdRequest(n)}),setTimeout(function(){const e=n.callback;n.callback=null,e&&e()},s)})}isGptReady(){return"undefined"!=typeof googletag&&!!googletag.apiReady}initGpt(){"undefined"==typeof googletag&&(window.googletag={cmd:(0,o.QZ)(()=>{this.importGptLibrary(),this.importDvLibrary()})})}getUserMeta(){if(this.opt.allowAccountTargetingForThisRequest&&this.clc_options.tgt_e&&this.clc_options.tgt_p>0){if(e.cM("Targeting enabled."),this.clc_options.tgt_p<100){e.cM("Targeting rate limit enabled. Rolling the dice...");const t=Math.floor(100*Math.random())+1;if(e.cM("Rolled "+t+" and the max is "+this.clc_options.tgt_p),t>this.clc_options.tgt_p)return void e.cM("Will not request targeting.")}return e.cM("Will request targeting."),function(e,t,s,n){if(t){const t=new Headers;return t.append("Accept","application/json"),async function(e,t={},s=5e3){if("number"!=typeof s&&null!=s&&!1!==s){if("string"!=typeof s)throw new Error("fetchWithTimeout: timeout must be a number");if(s=parseInt(s),isNaN(s))throw new Error("fetchWithTimeout: timeout must be a number (or string that can be parsed to a number)")}const n=new AbortController,{signal:o}=n,a=fetch(e,{...t,signal:o}),i=setTimeout(()=>n.abort(),s);try{const e=await a;return clearTimeout(i),e}catch(e){throw clearTimeout(i),e}}(s+"?"+new URLSearchParams({omni:e}),{method:"GET",mode:"cors",headers:t},n).then(e=>e.json())}return Promise.reject("No consent")}(this.opt.omni,this.opt.targeting_consent,this.clc_options.tgt_u,this.clc_options.tgt_to).catch(t=>{e.vU("Error fetching user account targeting"),e.vU(t)})}e.cM("Targeting disabled. Will not request account targeting data.")}initDebugPanel(t,s){e.cM("initDebugPanel"),e.cM("Not showing debug panel.")}},window.clcGamLoaderOptions&&(cam.init(),cam.load())})()})();</script> <footer id="footer" class="site-footer js-footer theme-light__forced" role="contentinfo"> <div class="site-footer--container"> <div class="site-footer--logo"> <a href="https://stackoverflow.com" aria-label="Stack Overflow"><svg aria-hidden="true" class="native svg-icon iconGlyphMd" width="32" height="37" viewBox="0 0 32 37"><path fill="#BCBBBB" d="M26 33v-9h4v13H0V24h4v9z"/><path fill="#F48024" d="m21.5 0-2.7 2 9.9 13.3 2.7-2zM26 18.4 13.3 7.8l2.1-2.5 12.7 10.6zM9.1 15.2l15 7 1.4-3-15-7zm14 10.79.68-2.95-16.1-3.35L7 23zM23 30H7v-3h16z"/></svg></a> </div> <nav class="site-footer--nav" aria-label="Footer"> <div class="site-footer--col"> <h5 class="-title"><a href="https://stackoverflow.com" class="js-gps-track" data-gps-track="footer.click({ location: 5, link: 15})">Stack Overflow</a></h5> <ul class="-list js-primary-footer-links"> <li><a href="/questions" class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 16})">Questions</a></li> <li><a href="/help" class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 3 })">Help</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 5 })" href="https://chat.stackoverflow.com/?tab=site&host=stackoverflow.com">Chat</a></li> </ul> </div> <div class="site-footer--col"> <h5 class="-title"><a href="https://stackoverflow.co/" class="js-gps-track" data-gps-track="footer.click({ location: 5, link: 19 })">Products</a></h5> <ul class="-list"> <li><a href="https://stackoverflow.co/teams/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=footer&utm_content=teams" class="js-gps-track -link" data-ga="["teams traffic","footer - site nav","stackoverflow.com/teams",null,{"dimension4":"teams"}]" data-gps-track="footer.click({ location: 5, link: 29 })">Teams</a></li> <li><a href="https://stackoverflow.co/advertising/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=footer&utm_content=advertising" class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 21 })">Advertising</a></li> <li><a href="https://stackoverflow.co/advertising/employer-branding/?utm_medium=referral&utm_source=stackoverflow-community&utm_campaign=footer&utm_content=talent" class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 20 })">Talent</a></li> </ul> </div> <div class="site-footer--col"> <h5 class="-title"><a class="js-gps-track" data-gps-track="footer.click({ location: 5, link: 1 })" href="https://stackoverflow.co/">Company</a></h5> <ul class="-list"> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 1 })" href="https://stackoverflow.co/">About</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 27 })" href="https://stackoverflow.co/company/press/">Press</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 9 })" href="https://stackoverflow.co/company/work-here/">Work Here</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 7 })" href="https://stackoverflow.com/legal">Legal</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 8 })" href="https://stackoverflow.com/legal/privacy-policy">Privacy Policy</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 37 })" href="https://stackoverflow.com/legal/terms-of-service/public">Terms of Service</a></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 13 })" href="/contact">Contact Us</a></li> <li id="consent-footer-link"><button type="button" data-controller="cookie-settings" data-action="click->cookie-settings#toggle" class="s-btn s-btn__link py4 js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 38 })" data-consent-popup-loader="footer">Cookie Settings</button></li> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link: 39 })" href="https://stackoverflow.com/legal/cookie-policy">Cookie Policy</a></li> </ul> </div> <div class="site-footer--col site-footer--categories-nav"> <div> <h5 class="-title"><a href="https://stackexchange.com" data-gps-track="footer.click({ location: 5, link: 30 })">Stack Exchange Network</a></h5> <ul class="-list"> <li> <a href="https://stackexchange.com/sites#technology" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Technology </a> </li> <li> <a href="https://stackexchange.com/sites#culturerecreation" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Culture & recreation </a> </li> <li> <a href="https://stackexchange.com/sites#lifearts" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Life & arts </a> </li> <li> <a href="https://stackexchange.com/sites#science" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Science </a> </li> <li> <a href="https://stackexchange.com/sites#professional" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Professional </a> </li> <li> <a href="https://stackexchange.com/sites#business" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Business </a> </li> <li class="mt16 md:mt0"> <a href="https://api.stackexchange.com/" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> API </a> </li> <li> <a href="https://data.stackexchange.com/" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 24 })"> Data </a> </li> </ul> </div> </div> </nav> <div class="site-footer--copyright fs-fine md:mt24"> <ul class="-list -social md:mb8"> <li><a class="js-gps-track -link" data-gps-track="footer.click({ location: 5, link:4 })" href="https://stackoverflow.blog?blb=1">Blog</a></li> <li><a href="https://www.facebook.com/officialstackoverflow/" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 31 })">Facebook</a></li> <li><a href="https://twitter.com/stackoverflow" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 32 })">Twitter</a></li> <li><a href="https://linkedin.com/company/stack-overflow" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 33 })">LinkedIn</a></li> <li><a href="https://www.instagram.com/thestackoverflow" class="-link js-gps-track" data-gps-track="footer.click({ location: 5, link: 36 })">Instagram</a></li> </ul> <p class="md:mb0"> <span>Site design / logo © 2025 Stack Exchange Inc; </span> <span>user contributions licensed under </span> <a class="-link s-link td-underline" href="https://stackoverflow.com/help/licensing">CC BY-SA</a> <span>. </span> <span id="svnrev">rev 2025.2.18.22736</span> </p> </div> </div> </footer> <!-- Google tag (gtag.js) --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-WCZ03SZFCQ"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } </script> <script> StackExchange.ready(function() { var ga3Settings = { autoLink: ["stackoverflow.blog","info.stackoverflowsolutions.com","stackoverflowsolutions.com"], sendTitles: true, tracker: window.ga, trackingCodes: [ 'UA-108242619-1' ], checkDimension: 'dimension42' }; var customGA4Dimensions = {}; customGA4Dimensions["requestid"] = "2b8862de-4341-4e69-92ed-d334ad598fca"; customGA4Dimensions["routename"] = "Questions/ListByTag"; customGA4Dimensions["tags"] = "|sinon|"; var ga4Settings = { tracker: gtag, trackingCodes: [ 'G-WCZ03SZFCQ' ], consentsToPerformanceCookies: "denied", consentsToTargetingCookies: "denied", eventParameters: customGA4Dimensions, checkForAdBlock: true, sendTitles: true, trackClicks: false, }; StackExchange.ga.init({ GA3: ga3Settings, GA4: ga4Settings }); StackExchange.ga.setDimension('dimension2', '|sinon|'); StackExchange.ga.setDimension('dimension3', 'Questions/ListByTag'); StackExchange.ga.setDimension('dimension7', "1739911304.699075402"); StackExchange.ga.trackPageView(); }); </script> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" charset="UTF-8" data-document-language="true" data-domain-script="c3d9f1e3-55f3-4eba-b268-46cee4c6789c"></script> <script defer src="https://cdn.sstatic.net/Js/modules/cookie-consent.en.js?v=36bebc18e04f"></script> <script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9140d6f2e8926cc1',t:'MTczOTkxMTMwNC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body> </html>