[{"data":1,"prerenderedAt":254},["ShallowReactive",2],{"term-s\u002Fstub":3,"related-s\u002Fstub":240},{"id":4,"title":5,"acronym":6,"body":7,"category":222,"description":223,"difficulty":224,"extension":225,"letter":226,"meta":227,"navigation":148,"path":228,"related":229,"seo":234,"sitemap":235,"stem":238,"subcategory":6,"__hash__":239},"terms\u002Fterms\u002Fs\u002Fstub.md","Stub",null,{"type":8,"value":9,"toc":216},"minimark",[10,15,19,23,26,30,205,209,212],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"A stub is like a cardboard cutout of a function. It stands in for the real thing and always gives you the same canned response. Unlike a mock, you don't check HOW it was called — it just quietly returns whatever you set up.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"A stub is a test double that provides predefined responses to method calls. Unlike mocks, stubs don't verify how they were called — they only provide controlled return values. Stubs are used to replace unpredictable dependencies like APIs or clocks.",[11,27,29],{"id":28},"show-me-the-code","Show Me The Code",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Stub always returns the same user\nconst userStub = {\n  findById: (id) => ({ id, name: 'Test User', email: 'test@example.com' })\n};\n\nconst result = renderProfile(userStub, 42);\nexpect(result).toContain('Test User');\n","javascript","",[38,39,40,49,67,137,143,150,177],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Stub always returns the same user\n",[41,50,52,56,60,64],{"class":43,"line":51},2,[41,53,55],{"class":54},"spNyl","const",[41,57,59],{"class":58},"sTEyZ"," userStub ",[41,61,63],{"class":62},"sMK4o","=",[41,65,66],{"class":62}," {\n",[41,68,70,74,77,80,84,87,90,92,95,98,101,105,107,110,114,117,119,122,124,126,129,131,134],{"class":43,"line":69},3,[41,71,73],{"class":72},"s2Zo4","  findById",[41,75,76],{"class":62},":",[41,78,79],{"class":62}," (",[41,81,83],{"class":82},"sHdIc","id",[41,85,86],{"class":62},")",[41,88,89],{"class":54}," =>",[41,91,79],{"class":58},[41,93,94],{"class":62},"{",[41,96,97],{"class":58}," id",[41,99,100],{"class":62},",",[41,102,104],{"class":103},"swJcz"," name",[41,106,76],{"class":62},[41,108,109],{"class":62}," '",[41,111,113],{"class":112},"sfazB","Test User",[41,115,116],{"class":62},"'",[41,118,100],{"class":62},[41,120,121],{"class":103}," email",[41,123,76],{"class":62},[41,125,109],{"class":62},[41,127,128],{"class":112},"test@example.com",[41,130,116],{"class":62},[41,132,133],{"class":62}," }",[41,135,136],{"class":58},")\n",[41,138,140],{"class":43,"line":139},4,[41,141,142],{"class":62},"};\n",[41,144,146],{"class":43,"line":145},5,[41,147,149],{"emptyLinePlaceholder":148},true,"\n",[41,151,153,155,158,160,163,166,168,172,174],{"class":43,"line":152},6,[41,154,55],{"class":54},[41,156,157],{"class":58}," result ",[41,159,63],{"class":62},[41,161,162],{"class":72}," renderProfile",[41,164,165],{"class":58},"(userStub",[41,167,100],{"class":62},[41,169,171],{"class":170},"sbssI"," 42",[41,173,86],{"class":58},[41,175,176],{"class":62},";\n",[41,178,180,183,186,189,192,195,197,199,201,203],{"class":43,"line":179},7,[41,181,182],{"class":72},"expect",[41,184,185],{"class":58},"(result)",[41,187,188],{"class":62},".",[41,190,191],{"class":72},"toContain",[41,193,194],{"class":58},"(",[41,196,116],{"class":62},[41,198,113],{"class":112},[41,200,116],{"class":62},[41,202,86],{"class":58},[41,204,176],{"class":62},[11,206,208],{"id":207},"when-youll-hear-this","When You'll Hear This",[16,210,211],{},"\"Stub out the database call so we can test the formatting logic.\" \u002F \"Use a stub when you just need a controlled return value.\"",[213,214,215],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":36,"searchDepth":51,"depth":51,"links":217},[218,219,220,221],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":207,"depth":51,"text":208},"testing","A stub is like a cardboard cutout of a function. It stands in for the real thing and always gives you the same canned response.","beginner","md","s",{},"\u002Fterms\u002Fs\u002Fstub",[230,231,232,233],"Mock","Spy","Test Double","Fixture",{"title":5,"description":223},{"changefreq":236,"priority":237},"weekly",0.7,"terms\u002Fs\u002Fstub","uEnGhSq6FtZI2ydf7-pGHCjuYHkevWMlWGknf-iWCT0",[241,244,247,251],{"title":233,"path":242,"acronym":6,"category":222,"difficulty":224,"description":243},"\u002Fterms\u002Ff\u002Ffixture","A fixture is like pre-built test furniture.",{"title":230,"path":245,"acronym":6,"category":222,"difficulty":224,"description":246},"\u002Fterms\u002Fm\u002Fmock","A mock is a fake version of something your code talks to.",{"title":231,"path":248,"acronym":6,"category":222,"difficulty":249,"description":250},"\u002Fterms\u002Fs\u002Fspy","intermediate","A spy is like a double agent — it lets the real function still do its job, but secretly records everything: how many times it was called, with what argumen...",{"title":232,"path":252,"acronym":6,"category":222,"difficulty":249,"description":253},"\u002Fterms\u002Ft\u002Ftest-double","Test double is the umbrella term for anything that replaces a real dependency in a test. Mocks, stubs, spies, fakes — they're all test doubles.",1776518316089]