[{"data":1,"prerenderedAt":847},["ShallowReactive",2],{"navigation_docs":3,"-guides-testing-scene-primitives-in-vue":159,"-guides-testing-scene-primitives-in-vue-surround":842},[4,29,57,76,100,124,152],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,12,16,20,24],{"title":5,"path":7,"stem":11},"1.getting-started\u002Findex",{"title":13,"path":14,"stem":15},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation",{"title":17,"path":18,"stem":19},"First Game","\u002Fgetting-started\u002Ffirst-game","1.getting-started\u002F2.first-game",{"title":21,"path":22,"stem":23},"SSR and Mounting","\u002Fgetting-started\u002Fssr-and-mounting","1.getting-started\u002F3.ssr-and-mounting",{"title":25,"path":26,"stem":27,"icon":28},"Skills","\u002Fgetting-started\u002Fskills","1.getting-started\u002F4.skills","i-lucide-sparkles",{"title":30,"icon":31,"path":32,"stem":33,"children":34},"Vue Guide","i-lucide-book-open","\u002Fvue-guide","2.vue-guide",[35,37,41,45,49,53],{"title":30,"path":32,"stem":36},"2.vue-guide\u002Findex",{"title":38,"path":39,"stem":40},"PhaserGame","\u002Fvue-guide\u002Fphaser-game","2.vue-guide\u002F1.phaser-game",{"title":42,"path":43,"stem":44},"Scenes","\u002Fvue-guide\u002Fscenes","2.vue-guide\u002F2.scenes",{"title":46,"path":47,"stem":48},"Primitives","\u002Fvue-guide\u002Fprimitives","2.vue-guide\u002F3.primitives",{"title":50,"path":51,"stem":52},"Composables and Bridge","\u002Fvue-guide\u002Fcomposables-and-bridge","2.vue-guide\u002F4.composables-and-bridge",{"title":54,"path":55,"stem":56},"Escape Hatches","\u002Fvue-guide\u002Fescape-hatches","2.vue-guide\u002F5.escape-hatches",{"title":58,"icon":59,"path":60,"stem":61,"children":62},"Nuxt Module","i-lucide-layers-3","\u002Fnuxt-module","3.nuxt-module",[63,65,68,72],{"title":58,"path":60,"stem":64},"3.nuxt-module\u002Findex",{"title":13,"path":66,"stem":67},"\u002Fnuxt-module\u002Finstallation","3.nuxt-module\u002F1.installation",{"title":69,"path":70,"stem":71},"Runtime Defaults","\u002Fnuxt-module\u002Fruntime-defaults","3.nuxt-module\u002F2.runtime-defaults",{"title":73,"path":74,"stem":75},"Client-only Wrapper","\u002Fnuxt-module\u002Fclient-only-wrapper","3.nuxt-module\u002F3.client-only-wrapper",{"title":77,"icon":78,"path":79,"stem":80,"children":81},"Examples","i-lucide-play-square","\u002Fexamples","4.examples",[82,84,88,92,96],{"title":77,"path":79,"stem":83},"4.examples\u002Findex",{"title":85,"path":86,"stem":87},"Minimal","\u002Fexamples\u002Fminimal","4.examples\u002F1.minimal",{"title":89,"path":90,"stem":91},"Imperative Escape Hatch","\u002Fexamples\u002Fimperative-escape-hatch","4.examples\u002F2.imperative-escape-hatch",{"title":93,"path":94,"stem":95},"Multi-scene","\u002Fexamples\u002Fmulti-scene","4.examples\u002F3.multi-scene",{"title":97,"path":98,"stem":99},"Nuxt Playground","\u002Fexamples\u002Fnuxt-playground","4.examples\u002F4.nuxt-playground",{"title":101,"icon":102,"path":103,"stem":104,"children":105},"API Reference","i-lucide-book-open-text","\u002Fapi-reference","5.api-reference",[106,108,112,116,120],{"title":101,"path":103,"stem":107},"5.api-reference\u002Findex",{"title":109,"path":110,"stem":111},"Vue Components","\u002Fapi-reference\u002Fvue-components","5.api-reference\u002F1.vue-components",{"title":113,"path":114,"stem":115},"Composables","\u002Fapi-reference\u002Fcomposables","5.api-reference\u002F2.composables",{"title":117,"path":118,"stem":119},"Types","\u002Fapi-reference\u002Ftypes","5.api-reference\u002F3.types",{"title":121,"path":122,"stem":123},"Nuxt Module Options","\u002Fapi-reference\u002Fnuxt-module-options","5.api-reference\u002F4.nuxt-module-options",{"title":125,"icon":126,"path":127,"stem":128,"children":129},"Guides","i-lucide-compass","\u002Fguides","6.guides",[130,132,136,140,144,148],{"title":125,"path":127,"stem":131},"6.guides\u002Findex",{"title":133,"path":134,"stem":135},"Performance","\u002Fguides\u002Fperformance","6.guides\u002F1.performance",{"title":137,"path":138,"stem":139},"Scene-first Design","\u002Fguides\u002Fscene-first-design","6.guides\u002F2.scene-first-design",{"title":141,"path":142,"stem":143},"Vue Reactivity vs Phaser Imperative Updates","\u002Fguides\u002Fvue-reactivity-vs-phaser-imperative-updates","6.guides\u002F3.vue-reactivity-vs-phaser-imperative-updates",{"title":145,"path":146,"stem":147},"Testing scene primitives in Vue","\u002Fguides\u002Ftesting-scene-primitives-in-vue","6.guides\u002F4.testing-scene-primitives-in-vue",{"title":149,"path":150,"stem":151},"Testing a Phaser canvas in Nuxt","\u002Fguides\u002Ftesting-a-phaser-canvas-in-nuxt","6.guides\u002F5.testing-a-phaser-canvas-in-nuxt",{"title":153,"path":154,"stem":155,"children":156,"icon":158},"Roadmap","\u002Froadmap","7.roadmap\u002Findex",[157],{"title":153,"path":154,"stem":155},"i-lucide-flag",{"id":160,"title":145,"body":161,"description":836,"extension":837,"links":838,"meta":839,"navigation":362,"path":146,"seo":840,"stem":147,"__hash__":841},"docs\u002F6.guides\u002F4.testing-scene-primitives-in-vue.md",{"type":162,"value":163,"toc":831},"minimark",[164,172,175,191,196,243,247,800,804,807,824,827],[165,166,167,171],"p",{},[168,169,170],"code",{},"@onmax\u002Fphaser-vue\u002Ftesting"," is the default testing layer for Vue component and composable tests.",[165,173,174],{},"It gives you:",[176,177,178,182,188],"ul",{},[179,180,181],"li",{},"a deterministic fake Phaser runtime",[179,183,184,185],{},"a Vue Test Utils mount helper that installs ",[168,186,187],{},"createPhaserVue()",[179,189,190],{},"a harness for inspecting created games, scenes, and game objects",[192,193,195],"h2",{"id":194},"install-the-testing-entrypoint","Install the testing entrypoint",[197,198,203],"pre",{"className":199,"code":200,"language":201,"meta":202,"style":202},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createFakeSceneDefinition, mountPhaser } from '@onmax\u002Fphaser-vue\u002Ftesting'\n","ts","",[168,204,205],{"__ignoreMap":202},[206,207,210,214,218,222,225,228,231,234,237,240],"span",{"class":208,"line":209},"line",1,[206,211,213],{"class":212},"s7zQu","import",[206,215,217],{"class":216},"sMK4o"," {",[206,219,221],{"class":220},"sTEyZ"," createFakeSceneDefinition",[206,223,224],{"class":216},",",[206,226,227],{"class":220}," mountPhaser",[206,229,230],{"class":216}," }",[206,232,233],{"class":212}," from",[206,235,236],{"class":216}," '",[206,238,170],{"class":239},"sfazB",[206,241,242],{"class":216},"'\n",[192,244,246],{"id":245},"example","Example",[197,248,250],{"className":199,"code":249,"language":201,"meta":202,"style":202},"import { defineComponent, h } from 'vue'\nimport { describe, expect, it } from 'vitest'\nimport { PhaserGame, PhaserScene } from '@onmax\u002Fphaser-vue'\nimport { createFakeSceneDefinition, mountPhaser } from '@onmax\u002Fphaser-vue\u002Ftesting'\n\nconst scene = createFakeSceneDefinition({\n  key: 'spec-scene',\n  create({ scene }) {\n    scene.add.text(16, 24, 'ready')\n  },\n})\n\ndescribe('scene host', () => {\n  it('creates the managed scene and primitive objects', () => {\n    const wrapper = mountPhaser(defineComponent({\n      setup() {\n        return () => h(PhaserGame, { width: 320, height: 180 }, {\n          default: () => h(PhaserScene, { sceneKey: scene.key, definition: scene }),\n        })\n      },\n    }))\n\n    expect(wrapper.harness.getGames()).toHaveLength(1)\n    expect(wrapper.harness.getScenes()).toHaveLength(1)\n    expect(wrapper.harness.getObjects()).toHaveLength(1)\n  })\n})\n",[168,251,252,277,308,334,357,364,386,407,426,466,472,480,485,510,533,556,567,610,661,669,675,684,689,725,755,785,793],{"__ignoreMap":202},[206,253,254,256,258,261,263,266,268,270,272,275],{"class":208,"line":209},[206,255,213],{"class":212},[206,257,217],{"class":216},[206,259,260],{"class":220}," defineComponent",[206,262,224],{"class":216},[206,264,265],{"class":220}," h",[206,267,230],{"class":216},[206,269,233],{"class":212},[206,271,236],{"class":216},[206,273,274],{"class":239},"vue",[206,276,242],{"class":216},[206,278,280,282,284,287,289,292,294,297,299,301,303,306],{"class":208,"line":279},2,[206,281,213],{"class":212},[206,283,217],{"class":216},[206,285,286],{"class":220}," describe",[206,288,224],{"class":216},[206,290,291],{"class":220}," expect",[206,293,224],{"class":216},[206,295,296],{"class":220}," it",[206,298,230],{"class":216},[206,300,233],{"class":212},[206,302,236],{"class":216},[206,304,305],{"class":239},"vitest",[206,307,242],{"class":216},[206,309,311,313,315,318,320,323,325,327,329,332],{"class":208,"line":310},3,[206,312,213],{"class":212},[206,314,217],{"class":216},[206,316,317],{"class":220}," PhaserGame",[206,319,224],{"class":216},[206,321,322],{"class":220}," PhaserScene",[206,324,230],{"class":216},[206,326,233],{"class":212},[206,328,236],{"class":216},[206,330,331],{"class":239},"@onmax\u002Fphaser-vue",[206,333,242],{"class":216},[206,335,337,339,341,343,345,347,349,351,353,355],{"class":208,"line":336},4,[206,338,213],{"class":212},[206,340,217],{"class":216},[206,342,221],{"class":220},[206,344,224],{"class":216},[206,346,227],{"class":220},[206,348,230],{"class":216},[206,350,233],{"class":212},[206,352,236],{"class":216},[206,354,170],{"class":239},[206,356,242],{"class":216},[206,358,360],{"class":208,"line":359},5,[206,361,363],{"emptyLinePlaceholder":362},true,"\n",[206,365,367,371,374,377,380,383],{"class":208,"line":366},6,[206,368,370],{"class":369},"spNyl","const",[206,372,373],{"class":220}," scene ",[206,375,376],{"class":216},"=",[206,378,221],{"class":379},"s2Zo4",[206,381,382],{"class":220},"(",[206,384,385],{"class":216},"{\n",[206,387,389,393,396,398,401,404],{"class":208,"line":388},7,[206,390,392],{"class":391},"swJcz","  key",[206,394,395],{"class":216},":",[206,397,236],{"class":216},[206,399,400],{"class":239},"spec-scene",[206,402,403],{"class":216},"'",[206,405,406],{"class":216},",\n",[206,408,410,413,416,420,423],{"class":208,"line":409},8,[206,411,412],{"class":391},"  create",[206,414,415],{"class":216},"({",[206,417,419],{"class":418},"sHdIc"," scene",[206,421,422],{"class":216}," })",[206,424,425],{"class":216}," {\n",[206,427,429,432,435,438,440,443,445,449,451,454,456,458,461,463],{"class":208,"line":428},9,[206,430,431],{"class":220},"    scene",[206,433,434],{"class":216},".",[206,436,437],{"class":220},"add",[206,439,434],{"class":216},[206,441,442],{"class":379},"text",[206,444,382],{"class":391},[206,446,448],{"class":447},"sbssI","16",[206,450,224],{"class":216},[206,452,453],{"class":447}," 24",[206,455,224],{"class":216},[206,457,236],{"class":216},[206,459,460],{"class":239},"ready",[206,462,403],{"class":216},[206,464,465],{"class":391},")\n",[206,467,469],{"class":208,"line":468},10,[206,470,471],{"class":216},"  },\n",[206,473,475,478],{"class":208,"line":474},11,[206,476,477],{"class":216},"}",[206,479,465],{"class":220},[206,481,483],{"class":208,"line":482},12,[206,484,363],{"emptyLinePlaceholder":362},[206,486,488,491,493,495,498,500,502,505,508],{"class":208,"line":487},13,[206,489,490],{"class":379},"describe",[206,492,382],{"class":220},[206,494,403],{"class":216},[206,496,497],{"class":239},"scene host",[206,499,403],{"class":216},[206,501,224],{"class":216},[206,503,504],{"class":216}," ()",[206,506,507],{"class":369}," =>",[206,509,425],{"class":216},[206,511,513,516,518,520,523,525,527,529,531],{"class":208,"line":512},14,[206,514,515],{"class":379},"  it",[206,517,382],{"class":391},[206,519,403],{"class":216},[206,521,522],{"class":239},"creates the managed scene and primitive objects",[206,524,403],{"class":216},[206,526,224],{"class":216},[206,528,504],{"class":216},[206,530,507],{"class":369},[206,532,425],{"class":216},[206,534,536,539,542,545,547,549,552,554],{"class":208,"line":535},15,[206,537,538],{"class":369},"    const",[206,540,541],{"class":220}," wrapper",[206,543,544],{"class":216}," =",[206,546,227],{"class":379},[206,548,382],{"class":391},[206,550,551],{"class":379},"defineComponent",[206,553,382],{"class":391},[206,555,385],{"class":216},[206,557,559,562,565],{"class":208,"line":558},16,[206,560,561],{"class":391},"      setup",[206,563,564],{"class":216},"()",[206,566,425],{"class":216},[206,568,570,573,575,577,579,581,583,585,587,590,592,595,597,600,602,605,608],{"class":208,"line":569},17,[206,571,572],{"class":212},"        return",[206,574,504],{"class":216},[206,576,507],{"class":369},[206,578,265],{"class":379},[206,580,382],{"class":391},[206,582,38],{"class":220},[206,584,224],{"class":216},[206,586,217],{"class":216},[206,588,589],{"class":391}," width",[206,591,395],{"class":216},[206,593,594],{"class":447}," 320",[206,596,224],{"class":216},[206,598,599],{"class":391}," height",[206,601,395],{"class":216},[206,603,604],{"class":447}," 180",[206,606,607],{"class":216}," },",[206,609,425],{"class":216},[206,611,613,616,618,620,622,624,626,629,631,633,636,638,640,642,645,647,650,652,654,656,659],{"class":208,"line":612},18,[206,614,615],{"class":379},"          default",[206,617,395],{"class":216},[206,619,504],{"class":216},[206,621,507],{"class":369},[206,623,265],{"class":379},[206,625,382],{"class":391},[206,627,628],{"class":220},"PhaserScene",[206,630,224],{"class":216},[206,632,217],{"class":216},[206,634,635],{"class":391}," sceneKey",[206,637,395],{"class":216},[206,639,419],{"class":220},[206,641,434],{"class":216},[206,643,644],{"class":220},"key",[206,646,224],{"class":216},[206,648,649],{"class":391}," definition",[206,651,395],{"class":216},[206,653,419],{"class":220},[206,655,230],{"class":216},[206,657,658],{"class":391},")",[206,660,406],{"class":216},[206,662,664,667],{"class":208,"line":663},19,[206,665,666],{"class":216},"        }",[206,668,465],{"class":391},[206,670,672],{"class":208,"line":671},20,[206,673,674],{"class":216},"      },\n",[206,676,678,681],{"class":208,"line":677},21,[206,679,680],{"class":216},"    }",[206,682,683],{"class":391},"))\n",[206,685,687],{"class":208,"line":686},22,[206,688,363],{"emptyLinePlaceholder":362},[206,690,692,695,697,700,702,705,707,710,713,715,718,720,723],{"class":208,"line":691},23,[206,693,694],{"class":379},"    expect",[206,696,382],{"class":391},[206,698,699],{"class":220},"wrapper",[206,701,434],{"class":216},[206,703,704],{"class":220},"harness",[206,706,434],{"class":216},[206,708,709],{"class":379},"getGames",[206,711,712],{"class":391},"())",[206,714,434],{"class":216},[206,716,717],{"class":379},"toHaveLength",[206,719,382],{"class":391},[206,721,722],{"class":447},"1",[206,724,465],{"class":391},[206,726,728,730,732,734,736,738,740,743,745,747,749,751,753],{"class":208,"line":727},24,[206,729,694],{"class":379},[206,731,382],{"class":391},[206,733,699],{"class":220},[206,735,434],{"class":216},[206,737,704],{"class":220},[206,739,434],{"class":216},[206,741,742],{"class":379},"getScenes",[206,744,712],{"class":391},[206,746,434],{"class":216},[206,748,717],{"class":379},[206,750,382],{"class":391},[206,752,722],{"class":447},[206,754,465],{"class":391},[206,756,758,760,762,764,766,768,770,773,775,777,779,781,783],{"class":208,"line":757},25,[206,759,694],{"class":379},[206,761,382],{"class":391},[206,763,699],{"class":220},[206,765,434],{"class":216},[206,767,704],{"class":220},[206,769,434],{"class":216},[206,771,772],{"class":379},"getObjects",[206,774,712],{"class":391},[206,776,434],{"class":216},[206,778,717],{"class":379},[206,780,382],{"class":391},[206,782,722],{"class":447},[206,784,465],{"class":391},[206,786,788,791],{"class":208,"line":787},26,[206,789,790],{"class":216},"  }",[206,792,465],{"class":391},[206,794,796,798],{"class":208,"line":795},27,[206,797,477],{"class":216},[206,799,465],{"class":220},[192,801,803],{"id":802},"when-to-use-this-layer","When to use this layer",[165,805,806],{},"Use the fake runtime when you want to verify:",[176,808,809,812,815,818,821],{},[179,810,811],{},"scene registration",[179,813,814],{},"bridge wiring",[179,816,817],{},"primitive props and patching",[179,819,820],{},"registry events",[179,822,823],{},"component lifecycle and expose contracts",[165,825,826],{},"Do not use it to prove real renderer behavior, pointer plumbing, or browser-only client boundaries. That belongs in browser-mode smoke tests.",[828,829,830],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":202,"searchDepth":279,"depth":279,"links":832},[833,834,835],{"id":194,"depth":279,"text":195},{"id":245,"depth":279,"text":246},{"id":802,"depth":279,"text":803},"Use the fake Phaser runtime and the Vue mount helper to test scene wiring without a real renderer.","md",null,{},{"title":145,"description":836},"oUIboous4ajhXmy9YN9xTnG6pCE90hPJECw4yHE1BY8",[843,845],{"title":141,"path":142,"stem":143,"description":844,"children":-1},"Decide what belongs in Vue state and what should stay inside the Phaser scene runtime.",{"title":149,"path":150,"stem":151,"description":846,"children":-1},"Combine Nuxt runtime helpers, the shared fake Phaser runtime, and browser-mode smoke tests without replacing Nuxt test-utils.",1777965862786]