[{"data":1,"prerenderedAt":470},["ShallowReactive",2],{"term-a\u002Fapi-testing":3,"related-a\u002Fapi-testing":455},{"id":4,"title":5,"acronym":6,"body":7,"category":436,"description":437,"difficulty":438,"extension":439,"letter":440,"meta":441,"navigation":101,"path":442,"related":443,"seo":449,"sitemap":450,"stem":453,"subcategory":6,"__hash__":454},"terms\u002Fterms\u002Fa\u002Fapi-testing.md","API Testing",null,{"type":8,"value":9,"toc":430},"minimark",[10,15,19,23,26,30,419,423,426],[11,12,14],"h2",{"id":13},"eli5-the-vibe-check","ELI5 — The Vibe Check",[16,17,18],"p",{},"API testing is checking that your backend endpoints work correctly — sending requests with different data and making sure you get the right responses, status codes, and error messages back. No UI needed. Tools like Postman, Insomnia, or Supertest let you test APIs directly.",[11,20,22],{"id":21},"real-talk","Real Talk",[16,24,25],{},"API testing validates that HTTP endpoints behave correctly by sending requests and asserting on responses (status codes, headers, body schema, response time). It can be done manually (Postman), programmatically (Supertest, Axios + Jest), or contract-driven (Pact).",[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 Supertest example\nimport request from 'supertest';\nimport app from '..\u002Fapp';\n\ndescribe('GET \u002Fusers\u002F:id', () => {\n  it('returns user when found', async () => {\n    const res = await request(app).get('\u002Fusers\u002F1');\n    expect(res.status).toBe(200);\n    expect(res.body).toMatchObject({ id: 1, name: expect.any(String) });\n  });\n  it('returns 404 when not found', async () => {\n    const res = await request(app).get('\u002Fusers\u002F99999');\n    expect(res.status).toBe(404);\n  });\n});\n","javascript","",[38,39,40,49,77,96,103,133,160,205,238,303,313,337,373,401,410],"code",{"__ignoreMap":36},[41,42,45],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sHwdD","\u002F\u002F Supertest example\n",[41,50,52,56,60,63,67,71,74],{"class":43,"line":51},2,[41,53,55],{"class":54},"s7zQu","import",[41,57,59],{"class":58},"sTEyZ"," request ",[41,61,62],{"class":54},"from",[41,64,66],{"class":65},"sMK4o"," '",[41,68,70],{"class":69},"sfazB","supertest",[41,72,73],{"class":65},"'",[41,75,76],{"class":65},";\n",[41,78,80,82,85,87,89,92,94],{"class":43,"line":79},3,[41,81,55],{"class":54},[41,83,84],{"class":58}," app ",[41,86,62],{"class":54},[41,88,66],{"class":65},[41,90,91],{"class":69},"..\u002Fapp",[41,93,73],{"class":65},[41,95,76],{"class":65},[41,97,99],{"class":43,"line":98},4,[41,100,102],{"emptyLinePlaceholder":101},true,"\n",[41,104,106,110,113,115,118,120,123,126,130],{"class":43,"line":105},5,[41,107,109],{"class":108},"s2Zo4","describe",[41,111,112],{"class":58},"(",[41,114,73],{"class":65},[41,116,117],{"class":69},"GET \u002Fusers\u002F:id",[41,119,73],{"class":65},[41,121,122],{"class":65},",",[41,124,125],{"class":65}," ()",[41,127,129],{"class":128},"spNyl"," =>",[41,131,132],{"class":65}," {\n",[41,134,136,139,142,144,147,149,151,154,156,158],{"class":43,"line":135},6,[41,137,138],{"class":108},"  it",[41,140,112],{"class":141},"swJcz",[41,143,73],{"class":65},[41,145,146],{"class":69},"returns user when found",[41,148,73],{"class":65},[41,150,122],{"class":65},[41,152,153],{"class":128}," async",[41,155,125],{"class":65},[41,157,129],{"class":128},[41,159,132],{"class":65},[41,161,163,166,169,172,175,178,180,183,186,189,192,194,196,199,201,203],{"class":43,"line":162},7,[41,164,165],{"class":128},"    const",[41,167,168],{"class":58}," res",[41,170,171],{"class":65}," =",[41,173,174],{"class":54}," await",[41,176,177],{"class":108}," request",[41,179,112],{"class":141},[41,181,182],{"class":58},"app",[41,184,185],{"class":141},")",[41,187,188],{"class":65},".",[41,190,191],{"class":108},"get",[41,193,112],{"class":141},[41,195,73],{"class":65},[41,197,198],{"class":69},"\u002Fusers\u002F1",[41,200,73],{"class":65},[41,202,185],{"class":141},[41,204,76],{"class":65},[41,206,208,211,213,216,218,221,223,225,228,230,234,236],{"class":43,"line":207},8,[41,209,210],{"class":108},"    expect",[41,212,112],{"class":141},[41,214,215],{"class":58},"res",[41,217,188],{"class":65},[41,219,220],{"class":58},"status",[41,222,185],{"class":141},[41,224,188],{"class":65},[41,226,227],{"class":108},"toBe",[41,229,112],{"class":141},[41,231,233],{"class":232},"sbssI","200",[41,235,185],{"class":141},[41,237,76],{"class":65},[41,239,241,243,245,247,249,252,254,256,259,261,264,267,270,273,275,278,280,283,285,288,290,293,296,299,301],{"class":43,"line":240},9,[41,242,210],{"class":108},[41,244,112],{"class":141},[41,246,215],{"class":58},[41,248,188],{"class":65},[41,250,251],{"class":58},"body",[41,253,185],{"class":141},[41,255,188],{"class":65},[41,257,258],{"class":108},"toMatchObject",[41,260,112],{"class":141},[41,262,263],{"class":65},"{",[41,265,266],{"class":141}," id",[41,268,269],{"class":65},":",[41,271,272],{"class":232}," 1",[41,274,122],{"class":65},[41,276,277],{"class":141}," name",[41,279,269],{"class":65},[41,281,282],{"class":58}," expect",[41,284,188],{"class":65},[41,286,287],{"class":108},"any",[41,289,112],{"class":141},[41,291,292],{"class":58},"String",[41,294,295],{"class":141},") ",[41,297,298],{"class":65},"}",[41,300,185],{"class":141},[41,302,76],{"class":65},[41,304,306,309,311],{"class":43,"line":305},10,[41,307,308],{"class":65},"  }",[41,310,185],{"class":141},[41,312,76],{"class":65},[41,314,316,318,320,322,325,327,329,331,333,335],{"class":43,"line":315},11,[41,317,138],{"class":108},[41,319,112],{"class":141},[41,321,73],{"class":65},[41,323,324],{"class":69},"returns 404 when not found",[41,326,73],{"class":65},[41,328,122],{"class":65},[41,330,153],{"class":128},[41,332,125],{"class":65},[41,334,129],{"class":128},[41,336,132],{"class":65},[41,338,340,342,344,346,348,350,352,354,356,358,360,362,364,367,369,371],{"class":43,"line":339},12,[41,341,165],{"class":128},[41,343,168],{"class":58},[41,345,171],{"class":65},[41,347,174],{"class":54},[41,349,177],{"class":108},[41,351,112],{"class":141},[41,353,182],{"class":58},[41,355,185],{"class":141},[41,357,188],{"class":65},[41,359,191],{"class":108},[41,361,112],{"class":141},[41,363,73],{"class":65},[41,365,366],{"class":69},"\u002Fusers\u002F99999",[41,368,73],{"class":65},[41,370,185],{"class":141},[41,372,76],{"class":65},[41,374,376,378,380,382,384,386,388,390,392,394,397,399],{"class":43,"line":375},13,[41,377,210],{"class":108},[41,379,112],{"class":141},[41,381,215],{"class":58},[41,383,188],{"class":65},[41,385,220],{"class":58},[41,387,185],{"class":141},[41,389,188],{"class":65},[41,391,227],{"class":108},[41,393,112],{"class":141},[41,395,396],{"class":232},"404",[41,398,185],{"class":141},[41,400,76],{"class":65},[41,402,404,406,408],{"class":43,"line":403},14,[41,405,308],{"class":65},[41,407,185],{"class":141},[41,409,76],{"class":65},[41,411,413,415,417],{"class":43,"line":412},15,[41,414,298],{"class":65},[41,416,185],{"class":58},[41,418,76],{"class":65},[11,420,422],{"id":421},"when-youll-hear-this","When You'll Hear This",[16,424,425],{},"\"Write API tests for every endpoint before we go to production.\" \u002F \"API testing caught that the \u002Fusers endpoint wasn't validating the email format.\"",[427,428,429],"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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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":431},[432,433,434,435],{"id":13,"depth":51,"text":14},{"id":21,"depth":51,"text":22},{"id":28,"depth":51,"text":29},{"id":421,"depth":51,"text":422},"testing","API testing is checking that your backend endpoints work correctly — sending requests with different data and making sure you get the right responses, stat...","beginner","md","a",{},"\u002Fterms\u002Fa\u002Fapi-testing",[444,445,446,447,448],"Contract Test","Integration Test","End-to-End Test","REST API","Assertion",{"title":5,"description":437},{"changefreq":451,"priority":452},"weekly",0.7,"terms\u002Fa\u002Fapi-testing","Y89Tv5IMI9p2cTmv8X7g6ahmkugfA4hK7zCb6PfBqN4",[456,459,463,467],{"title":448,"path":457,"acronym":6,"category":436,"difficulty":438,"description":458},"\u002Fterms\u002Fa\u002Fassertion","An assertion is your test saying 'I DEMAND this is true!'. It's you checking that the result is what you expected.",{"title":444,"path":460,"acronym":6,"category":436,"difficulty":461,"description":462},"\u002Fterms\u002Fc\u002Fcontract-test","intermediate","A contract test checks that two services agree on how they'll talk to each other — what requests look like, what responses look like.",{"title":446,"path":464,"acronym":465,"category":436,"difficulty":461,"description":466},"\u002Fterms\u002Fe\u002Fend-to-end-test","E2E","An end-to-end test is like hiring a robot to be a user.",{"title":445,"path":468,"acronym":6,"category":436,"difficulty":461,"description":469},"\u002Fterms\u002Fi\u002Fintegration-test","If a unit test checks one LEGO brick, an integration test checks that two bricks actually snap together correctly.",1776518253051]