[{"data":1,"prerenderedAt":277},["ShallowReactive",2],{"term-c\u002Fcontract-test":3,"related-c\u002Fcontract-test":265},{"id":4,"title":5,"acronym":6,"body":7,"category":246,"description":247,"difficulty":248,"extension":249,"letter":250,"meta":251,"navigation":252,"path":253,"related":254,"seo":259,"sitemap":260,"stem":263,"subcategory":6,"__hash__":264},"terms\u002Fterms\u002Fc\u002Fcontract-test.md","Contract Test",null,{"type":8,"value":9,"toc":240},"minimark",[10,15,19,23,26,30,229,233,236],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"A contract test checks that two services agree on how they'll talk to each other — what requests look like, what responses look like. If Service A changes its API, the contract test fails before Service B even knows about it. It's a handshake agreement backed by automation.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"Contract testing verifies that service interfaces conform to a shared contract, enabling independent deployment of microservices. Consumer-driven contract testing (using Pact) lets consumers define expectations and providers verify they meet them, catching breaking changes before they reach production.",[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 Pact consumer test\nconst interaction = {\n  state: 'user exists',\n  uponReceiving: 'a request for user 1',\n  withRequest: { method: 'GET', path: '\u002Fusers\u002F1' },\n  willRespondWith: {\n    status: 200,\n    body: { id: 1, name: like('Alice') }\n  }\n};\n","javascript","",[38,39,40,49,67,90,107,148,158,172,217,223],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Pact consumer test\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"," interaction ",[41,61,63],{"class":62},"sMK4o","=",[41,65,66],{"class":62}," {\n",[41,68,70,74,77,80,84,87],{"class":43,"line":69},3,[41,71,73],{"class":72},"swJcz","  state",[41,75,76],{"class":62},":",[41,78,79],{"class":62}," '",[41,81,83],{"class":82},"sfazB","user exists",[41,85,86],{"class":62},"'",[41,88,89],{"class":62},",\n",[41,91,93,96,98,100,103,105],{"class":43,"line":92},4,[41,94,95],{"class":72},"  uponReceiving",[41,97,76],{"class":62},[41,99,79],{"class":62},[41,101,102],{"class":82},"a request for user 1",[41,104,86],{"class":62},[41,106,89],{"class":62},[41,108,110,113,115,118,121,123,125,128,130,133,136,138,140,143,145],{"class":43,"line":109},5,[41,111,112],{"class":72},"  withRequest",[41,114,76],{"class":62},[41,116,117],{"class":62}," {",[41,119,120],{"class":72}," method",[41,122,76],{"class":62},[41,124,79],{"class":62},[41,126,127],{"class":82},"GET",[41,129,86],{"class":62},[41,131,132],{"class":62},",",[41,134,135],{"class":72}," path",[41,137,76],{"class":62},[41,139,79],{"class":62},[41,141,142],{"class":82},"\u002Fusers\u002F1",[41,144,86],{"class":62},[41,146,147],{"class":62}," },\n",[41,149,151,154,156],{"class":43,"line":150},6,[41,152,153],{"class":72},"  willRespondWith",[41,155,76],{"class":62},[41,157,66],{"class":62},[41,159,161,164,166,170],{"class":43,"line":160},7,[41,162,163],{"class":72},"    status",[41,165,76],{"class":62},[41,167,169],{"class":168},"sbssI"," 200",[41,171,89],{"class":62},[41,173,175,178,180,182,185,187,190,192,195,197,201,204,206,209,211,214],{"class":43,"line":174},8,[41,176,177],{"class":72},"    body",[41,179,76],{"class":62},[41,181,117],{"class":62},[41,183,184],{"class":72}," id",[41,186,76],{"class":62},[41,188,189],{"class":168}," 1",[41,191,132],{"class":62},[41,193,194],{"class":72}," name",[41,196,76],{"class":62},[41,198,200],{"class":199},"s2Zo4"," like",[41,202,203],{"class":58},"(",[41,205,86],{"class":62},[41,207,208],{"class":82},"Alice",[41,210,86],{"class":62},[41,212,213],{"class":58},") ",[41,215,216],{"class":62},"}\n",[41,218,220],{"class":43,"line":219},9,[41,221,222],{"class":62},"  }\n",[41,224,226],{"class":43,"line":225},10,[41,227,228],{"class":62},"};\n",[11,230,232],{"id":231},"when-youll-hear-this","When You'll Hear This",[16,234,235],{},"\"Contract tests let us deploy the auth service independently without breaking the API gateway.\" \u002F \"The contract test failed — the provider changed the response schema.\"",[237,238,239],"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 .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 pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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":241},[242,243,244,245],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":231,"depth":51,"text":232},"testing","A contract test checks that two services agree on how they'll talk to each other — what requests look like, what responses look like.","intermediate","md","c",{},true,"\u002Fterms\u002Fc\u002Fcontract-test",[255,256,257,258],"API Testing","Integration Test","Microservices","End-to-End Test",{"title":5,"description":247},{"changefreq":261,"priority":262},"weekly",0.7,"terms\u002Fc\u002Fcontract-test","zU-w2MMQ4MJHbp4v7Qghv2Wm89xuUnsKXaGFSku-coU",[266,270,274],{"title":255,"path":267,"acronym":6,"category":246,"difficulty":268,"description":269},"\u002Fterms\u002Fa\u002Fapi-testing","beginner","API testing is checking that your backend endpoints work correctly — sending requests with different data and making sure you get the right responses, stat...",{"title":258,"path":271,"acronym":272,"category":246,"difficulty":248,"description":273},"\u002Fterms\u002Fe\u002Fend-to-end-test","E2E","An end-to-end test is like hiring a robot to be a user.",{"title":256,"path":275,"acronym":6,"category":246,"difficulty":248,"description":276},"\u002Fterms\u002Fi\u002Fintegration-test","If a unit test checks one LEGO brick, an integration test checks that two bricks actually snap together correctly.",1776518269959]