[{"data":1,"prerenderedAt":604},["ShallowReactive",2],{"page:\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Ftesting":3},{"id":4,"title":5,"body":6,"description":586,"extension":587,"frontmatter":588,"heading":5,"meta":595,"navigation":597,"order":592,"path":598,"seo":599,"sitemap":600,"source":601,"stem":602,"__hash__":603},"docs\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Ftesting.md","Testing",{"type":7,"value":8,"toc":580},"minimark",[9,21,69,72,214,219,238],[10,11,12,16,17,20],"p",{},[13,14,15],"code",{},"kubb\u002Fkit\u002Ftesting"," is a separate subpath for the Vitest-backed helpers used to test plugins, generators, and adapters. It stays separate from ",[13,18,19],{},"kubb\u002Fkit"," so importing the authoring toolkit never pulls Vitest into a plugin's runtime dependencies.",[22,23,28],"pre",{"language":24,"filename":25,"code":26,"class":27},"typescript","plugin.test.ts","import { createMockedPlugin, renderGeneratorOperation, matchFiles } from 'kubb\u002Fkit\u002Ftesting'","highlights",[13,29,31],{"class":30},"language-typescript",[32,33,36,40,44,48,51,54,56,59,62,65],"span",{"class":34,"style":35},"line","display: inline",[32,37,39],{"style":38},"color:#d73a49;--hls-dark:#f97583","import ",[32,41,43],{"style":42},"color:#005cc5;--hls-dark:#79b8ff","{ ",[32,45,47],{"style":46},"color:#24292e;--hls-dark:#e1e4e8","createMockedPlugin",[32,49,50],{"style":38},", ",[32,52,53],{"style":46},"renderGeneratorOperation",[32,55,50],{"style":38},[32,57,58],{"style":46},"matchFiles ",[32,60,61],{"style":42},"} ",[32,63,64],{"style":38},"from ",[32,66,68],{"style":67},"color:#032f62;--hls-dark:#9ecbff","'kubb\u002Fkit\u002Ftesting'",[10,70,71],{},"The subpath exports mocking builders, generator runners, and a snapshot matcher:",[73,74,75,88],"table",{},[76,77,78],"thead",{},[79,80,81,85],"tr",{},[82,83,84],"th",{},"Export",[82,86,87],{},"What it does",[89,90,91,101,119,129,151,169,184,200],"tbody",{},[79,92,93,98],{},[94,95,96],"td",{},[13,97,47],{},[94,99,100],{},"Builds a minimal plugin for a test without wiring a full config.",[79,102,103,108],{},[94,104,105],{},[13,106,107],{},"createMockedAdapter",[94,109,110,111,114,115,118],{},"Builds a minimal adapter for a test without wiring a full config. ",[13,112,113],{},"parse"," returns an empty ",[13,116,117],{},"InputNode"," by default.",[79,120,121,126],{},[94,122,123],{},[13,124,125],{},"createMockedPluginDriver",[94,127,128],{},"Builds a driver around a set of plugins so a generator runs through its real lifecycle in isolation.",[79,130,131,136],{},[94,132,133],{},[13,134,135],{},"createMockedSetupContext",[94,137,138,139,142,143,146,147,150],{},"Builds the ",[13,140,141],{},"kubb:plugin:setup"," context with spy methods. Its ",[13,144,145],{},"requirePlugin"," fails for plugins not listed in ",[13,148,149],{},"plugins",".",[79,152,153,158],{},[94,154,155],{},[13,156,157],{},"renderGeneratorSchema",[94,159,160,161,164,165,168],{},"Calls a generator's ",[13,162,163],{},"schema()"," method against a ",[13,166,167],{},"SchemaNode"," fixture and collects the files it emits.",[79,170,171,175],{},[94,172,173],{},[13,174,53],{},[94,176,160,177,180,181,168],{},[13,178,179],{},"operation()"," method against an ",[13,182,183],{},"OperationNode",[79,185,186,191],{},[94,187,188],{},[13,189,190],{},"renderGeneratorOperations",[94,192,160,193,196,197,199],{},[13,194,195],{},"operations()"," method against an array of ",[13,198,183],{}," fixtures and collects the files it emits.",[79,201,202,207],{},[94,203,204],{},[13,205,206],{},"matchFiles",[94,208,209,210,213],{},"Asserts the generated ",[13,211,212],{},"FileNode","s match expected paths and contents through file snapshots, the assertion most generator tests end on.",[215,216,218],"h2",{"id":217},"plugin-setup","Test a plugin's setup",[10,220,221,222,224,225,230,231,234,235,150],{},"Pass a mocked setup context to the plugin's ",[13,223,141],{}," handler, then assert on its spies. When setup uses ",[226,227,229],"a",{"href":228},"\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Fplugins#setup-context","composables",", run it inside ",[13,232,233],{},"kubbContext.run(ctx, …)",". Without it, the composables throw ",[13,236,237],{},"KUBB_NO_CONTEXT",[22,239,241],{"language":24,"filename":25,"code":240,"class":27},"import { addGenerator, defineExtension, kubbContext } from 'kubb\u002Fkit'\nimport { createMockedSetupContext } from 'kubb\u002Fkit\u002Ftesting'\nimport { expect, test } from 'vitest'\n\nconst pluginExample = defineExtension({\n  kind: 'plugin',\n  meta: { name: 'plugin-example' },\n  hooks: {\n    'kubb:plugin:setup'() {\n      addGenerator({ name: 'example', operation: () => [] })\n    },\n  },\n})\n\ntest('registers one generator', () => {\n  const plugin = pluginExample()\n  const ctx = createMockedSetupContext()\n\n  kubbContext.run(ctx, () => plugin.hooks['kubb:plugin:setup']?.(ctx))\n\n  expect(ctx.addGenerator).toHaveBeenCalledTimes(1)\n})",[13,242,243,269,270,269,285,269,306,269,308,269,325,269,342,269,366,269,378,269,389,269,422,269,429,269,437,269,442,269,444,269,463,269,480,269,495,269,497,269,545,269,547,269,576],{"class":30},[32,244,245,247,249,252,254,257,259,262,264,266],{"class":34,"style":35},[32,246,39],{"style":38},[32,248,43],{"style":42},[32,250,251],{"style":46},"addGenerator",[32,253,50],{"style":38},[32,255,256],{"style":46},"defineExtension",[32,258,50],{"style":38},[32,260,261],{"style":46},"kubbContext ",[32,263,61],{"style":42},[32,265,64],{"style":38},[32,267,268],{"style":67},"'kubb\u002Fkit'","\n",[32,271,272,274,276,279,281,283],{"class":34,"style":35},[32,273,39],{"style":38},[32,275,43],{"style":42},[32,277,278],{"style":46},"createMockedSetupContext ",[32,280,61],{"style":42},[32,282,64],{"style":38},[32,284,68],{"style":67},[32,286,287,289,291,294,296,299,301,303],{"class":34,"style":35},[32,288,39],{"style":38},[32,290,43],{"style":42},[32,292,293],{"style":46},"expect",[32,295,50],{"style":38},[32,297,298],{"style":46},"test ",[32,300,61],{"style":42},[32,302,64],{"style":38},[32,304,305],{"style":67},"'vitest'",[32,307],{"class":34,"style":35},[32,309,310,313,316,319,322],{"class":34,"style":35},[32,311,312],{"style":38},"const ",[32,314,315],{"style":46},"pluginExample ",[32,317,318],{"style":38},"= ",[32,320,256],{"style":321},"color:#6f42c1;--hls-dark:#b392f0",[32,323,324],{"style":42},"({",[32,326,327,330,333,336,339],{"class":34,"style":35},[32,328,329],{"style":42},"  ",[32,331,332],{"style":42},"kind",[32,334,335],{"style":38},": ",[32,337,338],{"style":67},"'plugin'",[32,340,341],{"style":38},",",[32,343,344,346,349,351,353,356,358,361,364],{"class":34,"style":35},[32,345,329],{"style":38},[32,347,348],{"style":42},"meta",[32,350,335],{"style":38},[32,352,43],{"style":42},[32,354,355],{"style":42},"name",[32,357,335],{"style":38},[32,359,360],{"style":67},"'plugin-example' ",[32,362,363],{"style":42},"}",[32,365,341],{"style":38},[32,367,368,370,373,375],{"class":34,"style":35},[32,369,329],{"style":38},[32,371,372],{"style":42},"hooks",[32,374,335],{"style":38},[32,376,377],{"style":42},"{",[32,379,380,383,386],{"class":34,"style":35},[32,381,382],{"style":42},"    ",[32,384,385],{"style":67},"'kubb:plugin:setup'",[32,387,388],{"style":42},"() {",[32,390,391,394,396,399,401,403,406,408,411,413,416,419],{"class":34,"style":35},[32,392,393],{"style":42},"      ",[32,395,251],{"style":321},[32,397,398],{"style":42},"({ ",[32,400,355],{"style":42},[32,402,335],{"style":38},[32,404,405],{"style":67},"'example'",[32,407,50],{"style":38},[32,409,410],{"style":42},"operation",[32,412,335],{"style":38},[32,414,415],{"style":42},"() ",[32,417,418],{"style":38},"=> ",[32,420,421],{"style":42},"[] })",[32,423,424,427],{"class":34,"style":35},[32,425,426],{"style":42},"    }",[32,428,341],{"style":38},[32,430,431,433,435],{"class":34,"style":35},[32,432,329],{"style":38},[32,434,363],{"style":42},[32,436,341],{"style":38},[32,438,439],{"class":34,"style":35},[32,440,441],{"style":42},"})",[32,443],{"class":34,"style":35},[32,445,446,449,452,455,457,459,461],{"class":34,"style":35},[32,447,448],{"style":321},"test",[32,450,451],{"style":42},"(",[32,453,454],{"style":67},"'registers one generator'",[32,456,50],{"style":38},[32,458,415],{"style":42},[32,460,418],{"style":38},[32,462,377],{"style":42},[32,464,465,467,469,472,474,477],{"class":34,"style":35},[32,466,329],{"style":42},[32,468,312],{"style":38},[32,470,471],{"style":46},"plugin ",[32,473,318],{"style":38},[32,475,476],{"style":321},"pluginExample",[32,478,479],{"style":42},"()",[32,481,482,484,486,489,491,493],{"class":34,"style":35},[32,483,329],{"style":42},[32,485,312],{"style":38},[32,487,488],{"style":46},"ctx ",[32,490,318],{"style":38},[32,492,135],{"style":321},[32,494,479],{"style":42},[32,496],{"class":34,"style":35},[32,498,499,501,504,506,509,511,514,516,518,520,523,525,527,530,532,535,538,540,542],{"class":34,"style":35},[32,500,329],{"style":42},[32,502,503],{"style":46},"kubbContext",[32,505,150],{"style":38},[32,507,508],{"style":321},"run",[32,510,451],{"style":42},[32,512,513],{"style":46},"ctx",[32,515,50],{"style":38},[32,517,415],{"style":42},[32,519,418],{"style":38},[32,521,522],{"style":46},"plugin",[32,524,150],{"style":38},[32,526,372],{"style":42},[32,528,529],{"style":42},"[",[32,531,385],{"style":67},[32,533,534],{"style":42},"]",[32,536,537],{"style":38},"?.",[32,539,451],{"style":42},[32,541,513],{"style":46},[32,543,544],{"style":42},"))",[32,546],{"class":34,"style":35},[32,548,549,551,553,555,557,559,561,564,566,569,571,574],{"class":34,"style":35},[32,550,329],{"style":42},[32,552,293],{"style":321},[32,554,451],{"style":42},[32,556,513],{"style":46},[32,558,150],{"style":38},[32,560,251],{"style":42},[32,562,563],{"style":42},")",[32,565,150],{"style":38},[32,567,568],{"style":321},"toHaveBeenCalledTimes",[32,570,451],{"style":42},[32,572,573],{"style":42},"1",[32,575,563],{"style":42},[32,577,578],{"class":34,"style":35},[32,579,441],{"style":42},{"title":581,"searchDepth":582,"depth":582,"links":583},"",5,[584],{"id":217,"depth":585,"text":218},2,"kubb\u002Fkit\u002Ftesting is a separate subpath for the Vitest-backed helpers used to test plugins, generators, and adapters, kept apart from kubb\u002Fkit so the authoring toolkit never pulls in Vitest.","md",{"layout":589,"title":5,"description":586,"outline":590,"order":592,"navigation":593},"doc",[585,591],3,12,{"title":5,"icon":594},"i-iconoir-flask",{"layout":589,"outline":596},[585,591],{"title":5,"icon":594},"\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Ftesting",{"title":5,"description":586},{"loc":598},"kubb-labs\u002Fkubb\u002Fdocs\u002F5.x\u002Freference\u002Fkit\u002Ftesting.md","docs\u002F5.x\u002Freference\u002Fkit\u002Ftesting","e5CGEVh1rjvLkCNKCzn4Ne1Dkzj_nuonUWafb0fT7RM",1792931645359]