1"use strict";(self.webpackChunkreact_testing_library_docs=self.webpackChunkreact_testing_library_docs||[]).push([[5556],{3905:(e,t,n)=>{n.d(t,{Zo:()=>m,kt:()=>c});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?i(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function l(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},i=Object.keys(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a<i.length;a++)n=i[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=a.createContext({}),p=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},m=function(e){var t=p(e.components);return a.createElement(o.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,o=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),d=p(n),c=r,v=d["".concat(o,".").concat(c)]||d[c]||u[c]||i;return n?a.createElement(v,s(s({ref:t},m),{},{components:n})):a.createElement(v,s({ref:t},m))}));function c(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=d;var l={};for(var o in t)hasOwnProperty.call(t,o)&&(l[o]=t[o]);l.originalType=e,l.mdxType="string"==typeof e?e:r,s[1]=l;for(var p=2;p<i;p++)s[p]=n[p];return a.createElement.apply(null,s)}return a.createElement.apply(null,n)}d.displayName="MDXCreateElement"},5162:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(7294),r=n(6010);const i="tabItem_Ymn6";function s(e){var t=e.children,n=e.hidden,s=e.className;return a.createElement("div",{role:"tabpanel",className:(0,r.Z)(i,s),hidden:n},t)}},5488:(e,t,n)=>{n.d(t,{Z:()=>c});var a=n(7462),r=n(7294),i=n(6010),s=n(2389),l=n(7392),o=n(7094),p=n(2466);const m="tabList__CuJ",u="tabItem_LNqP";function d(e){var t,n,s=e.lazy,d=e.block,c=e.defaultValue,v=e.values,g=e.groupId,k=e.className,f=r.Children.map(e.children,(function(e){if((0,r.isValidElement)(e)&&"value"in e.props)return e;throw new Error("Docusaurus error: Bad <Tabs> child <"+("string"==typeof e.type?e.type:e.type.name)+'>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.')})),h=null!=v?v:f.map((function(e){var t=e.props;return{value:t.value,label:t.label,attributes:t.attributes}})),b=(0,l.l)(h,(function(e,t){return e.value===t.value}));if(b.length>0)throw new Error('Docusaurus error: Duplicate values "'+b.map((function(e){return e.value})).join(", ")+'" found in <Tabs>. Every value needs to be unique.');var N=null===c?c:null!=(t=null!=c?c:null==(n=f.find((function(e){return e.props.default})))?void 0:n.props.value)?t:f[0].props.value;if(null!==N&&!h.some((function(e){return e.value===N})))throw new Error('Docusaurus error: The <Tabs> has a defaultValue "'+N+'" but none of its children has the corresponding value. Available values are: '+h.map((function(e){return e.value})).join(", ")+". If you intend to show no default tab, use defaultValue={null} instead.");var y=(0,o.U)(),j=y.tabGroupChoices,T=y.setTabGroupChoices,C=(0,r.useState)(N),w=C[0],x=C[1],O=[],E=(0,p.o5)().blockElementScrollPositionUntilNextRender;if(null!=g){var I=j[g];null!=I&&I!==w&&h.some((function(e){return e.value===I}))&&x(I)}var S=function(e){var t=e.currentTarget,n=O.indexOf(t),a=h[n].value;a!==w&&(E(t),x(a),null!=g&&T(g,String(a)))},Z=function(e){var t,n=null;switch(e.key){case"ArrowRight":var a,r=O.indexOf(e.currentTarget)+1;n=null!=(a=O[r])?a:O[0];break;case"ArrowLeft":var i,s=O.indexOf(e.currentTarget)-1;n=null!=(i=O[s])?i:O[O.length-1]}
1null==(t=n)||t.focus()};return r.createElement("div",{className:(0,i.Z)("tabs-container",m)},r.createElement("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,i.Z)("tabs",{"tabs--block":d},k)},h.map((function(e){var t=e.value,n=e.label,s=e.attributes;return r.createElement("li",(0,a.Z)({role:"tab",tabIndex:w===t?0:-1,"aria-selected":w===t,key:t,ref:function(e){return O.push(e)},onKeyDown:Z,onFocus:S,onClick:S},s,{className:(0,i.Z)("tabs__item",u,null==s?void 0:s.className,{"tabs__item--active":w===t})}),null!=n?n:t)}))),s?(0,r.cloneElement)(f.filter((function(e){return e.props.value===w}))[0],{className:"margin-top--md"}):r.createElement("div",{className:"margin-top--md"},f.map((function(e,t){return(0,r.cloneElement)(e,{key:t,hidden:e.props.value!==w})}))))}function c(e){var t=(0,s.Z)();return r.createElement(d,(0,a.Z)({key:String(t)},e))}},43:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>d,contentTitle:()=>m,default:()=>g,frontMatter:()=>p,metadata:()=>u,toc:()=>c});var a=n(7462),r=n(3366),i=(n(7294),n(3905)),s=n(5488),l=n(5162),o=["components"],p={id:"setup",title:"Setup",sidebar_label:"Setup"},m=void 0,u={unversionedId:"svelte-testing-library/setup",id:"svelte-testing-library/setup",title:"Setup",description:"We recommend using Vitest, but you're free to use the library with any test",source:"@site/docs/svelte-testing-library/setup.mdx",sourceDirName:"svelte-testing-library",slug:"/svelte-testing-library/setup",permalink:"/docs/svelte-testing-library/setup",draft:!1,editUrl:"https://github.com/testing-library/testing-library-docs/edit/main/docs/svelte-testing-library/setup.mdx",tags:[],version:"current",lastUpdatedBy:"neknalb",lastUpdatedAt:1741036849,formattedLastUpdatedAt:"Mar 3, 2025",frontMatter:{id:"setup",title:"Setup",sidebar_label:"Setup"},sidebar:"docs",previous:{title:"Example",permalink:"/docs/svelte-testing-library/example"},next:{title:"API",permalink:"/docs/svelte-testing-library/api"}},d={},c=[{value:"Vitest",id:"vitest",level:2},{value:"TypeScript",id:"typescript",level:3},{value:"Jest",id:"jest",level:2},{value:"TypeScript and preprocessors",id:"typescript-and-preprocessors",level:3}],v={toc:c};function g(e){var t=e.components,n=(0,r.Z)(e,o);return(0,i.kt)("wrapper",(0,a.Z)({},v,n,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("p",null,"We recommend using ",(0,i.kt)("a",{parentName:"p",href:"https://vitest.dev/"},"Vitest"),", but you're free to use the library with any test\nrunner that's ESM compatible."),(0,i.kt)("h2",{id:"vitest"},"Vitest"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add development dependencies"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/testing-library/svelte-testing-library"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/svelte"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/jest-dom"))," (Optional, but\nhighly recommended)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/sveltejs/vite-plugin-svelte"},(0,i.kt)("inlineCode",{parentName:"a"},"@sveltejs/vite-plugin-svelte"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://vitest.dev/"},(0,i.kt)("inlineCode",{parentName:"a"},"vitest"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/jsdom/jsdom"},(0,i.kt)("inlineCode",{parentName:"a"},"jsdom")),", ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/capricorn86/happy-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"happy-dom")),", or other ",(0,i.kt)("a",{parentName:"li",href:"https://vitest.dev/guide/environment.html"},"Vitest DOM\nenvironment"))),(0,i.kt)(s.Z,{groupId:"npm2yarn",mdxType:"Tabs"},(0,i.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install --save-dev \\\n @testing-library/svelte \\\n @testing-library/jest-dom \\\n @sveltejs/vite-plugin-svelte \\\n vitest \\\n jsdom\n"))),(0,i.kt)(l.Z,{value:"yarn",label:"Yarn",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"}
1,"yarn add --dev \\\n @testing-library/svelte \\\n @testing-library/jest-dom \\\n @sveltejs/vite-plugin-svelte \\\n vitest \\\n jsdom\n")))),(0,i.kt)("p",{parentName:"li"},"Optionally install ",(0,i.kt)("a",{parentName:"p",href:"https://vitest.dev/guide/ui.html"},(0,i.kt)("inlineCode",{parentName:"a"},"@vitest/ui")),", which opens a UI within a\nbrowser window to follow the progress and interact with your tests."),(0,i.kt)(s.Z,{groupId:"npm2yarn",mdxType:"Tabs"},(0,i.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install --save-dev @vitest/ui\n"))),(0,i.kt)(l.Z,{value:"yarn",label:"Yarn",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"yarn add --dev @vitest/ui\n"))))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add a ",(0,i.kt)("inlineCode",{parentName:"p"},"vitest-setup.js")," file to optionally set up\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/jest-dom"))," expect matchers."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="vitest-setup.js"',title:'"vitest-setup.js"'},"import '@testing-library/jest-dom/vitest'\n"))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add ",(0,i.kt)("inlineCode",{parentName:"p"},"vitest.config.js"),", or update your existing ",(0,i.kt)("inlineCode",{parentName:"p"},"vite.config.js"),", with the\n",(0,i.kt)("inlineCode",{parentName:"p"},"svelte")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"svelteTesting")," Vite plugins. Set the testing environment to\nyour DOM library of choice and optionally configure your setup file from step\n(2)."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="vite.config.js"',title:'"vite.config.js"'},"import {defineConfig} from 'vitest/config'\nimport {svelte} from '@sveltejs/vite-plugin-svelte'\nimport {svelteTesting} from '@testing-library/svelte/vite'\n\nexport default defineConfig({\n plugins: [svelte(), svelteTesting()],\n test: {\n environment: 'jsdom',\n setupFiles: ['./vitest-setup.js'],\n },\n})\n")),(0,i.kt)("p",{parentName:"li"},"Or, if you're using ",(0,i.kt)("a",{parentName:"p",href:"https://kit.svelte.dev/"},"SvelteKit"),":"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="vite.config.js"',title:'"vite.config.js"'},"import {defineConfig} from 'vitest/config'\nimport {sveltekit} from '@sveltejs/kit/vite'\nimport {svelteTesting} from '@testing-library/svelte/vite'\n\nexport default defineConfig({\n plugins: [sveltekit(), svelteTesting()],\n test: {\n environment: 'jsdom',\n setupFiles: ['./vitest-setup.js'],\n },\n})\n")),(0,i.kt)("admonition",{parentName:"li",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"},"svelteTesting")," plugin:"),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"Adds an automatic cleanup fixture to ",(0,i.kt)("a",{parentName:"li",href:"https://vitest.dev/config/#setupfiles"},(0,i.kt)("inlineCode",{parentName:"a"},"test.setupFiles"))),(0,i.kt)("li",{parentName:"ul"},"Adds ",(0,i.kt)("inlineCode",{parentName:"li"},"browser")," to ",(0,i.kt)("a",{parentName:"li",href:"https://vitejs.dev/config/shared-options.html#resolve-conditions"},(0,i.kt)("inlineCode",{parentName:"a"},"resolve.conditions")))),(0,i.kt)("p",{parentName:"admonition"},"If needed, you can disable either behavior. Disabling both options is\nequivalent to omitting the plugin."),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-js"},"svelteTesting({\n // disable auto cleanup\n autoCleanup: false,\n // disable browser resolution condition\n resolveBrowser: false,\n})\n")),(0,i.kt)("p",{parentName:"admonition"},"Resolving the ",(0,i.kt)("inlineCode",{parentName:"p"},"browser")," condition may cause issues if you have a complex Vite\nconfiguration or dependencies that cannot be loaded into Node.js. See\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/svelte-testing-library/issues/222"},"testing-library/svelte-testing-library#222")," for more information and\nalternative configuration options to ensure Svelte's browser code is used."))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add test scripts to your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.json")," to run the tests with Vitest"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n "scripts": {\n "test": "vitest run",\n "test:ui": "vitest --ui",\n "test:watch": "vitest"\n }\n}\n'))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Create your component and a test file (checkout the rest of the docs to see\nhow) and run the following command to run the tests."),(0,i.kt)(s.Z,{groupId:"npm2yarn",mdxType:"Tabs"},(0,i.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm test\n"))),(0,i.kt)(l.Z,{value:"yarn",label:"Yarn",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"yarn test\n")))))),(0,i.kt)("h3",{id:"typescript"},"TypeScript"),(0,i.kt)("p",null,"Include ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"}
1,"@testing-library/jest-dom"))," to the\nTypeScript ",(0,i.kt)("inlineCode",{parentName:"p"},"types")," to make the TypeScript compiler aware about the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/jest-dom"))," matchers."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="tsconfig.json"',title:'"tsconfig.json"'},'{\n "compilerOptions": {\n "types": ["@testing-library/jest-dom"]\n }\n}\n')),(0,i.kt)("h2",{id:"jest"},"Jest"),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/svelte-testing-library"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/svelte"))," is ESM-only, which means\nyou must use Jest in ",(0,i.kt)("a",{parentName:"p",href:"https://jestjs.io/docs/ecmascript-modules"},"ESM mode"),"."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add development dependencies"),(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/testing-library/svelte-testing-library"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/svelte"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/jest-dom"))," (Optional, but\nhighly recommended)"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/svelteness/svelte-jester"},(0,i.kt)("inlineCode",{parentName:"a"},"svelte-jester"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://vitest.dev/"},(0,i.kt)("inlineCode",{parentName:"a"},"jest"))),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://jestjs.io/docs/configuration#testenvironment-string"},(0,i.kt)("inlineCode",{parentName:"a"},"jest-environment-jsdom")))),(0,i.kt)(s.Z,{groupId:"npm2yarn",mdxType:"Tabs"},(0,i.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm install --save-dev \\\n @testing-library/svelte \\\n @testing-library/jest-dom \\\n svelte-jester \\\n jest \\\n jest-environment-jsdom\n"))),(0,i.kt)(l.Z,{value:"yarn",label:"Yarn",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"}
1,"yarn add --dev \\\n @testing-library/svelte \\\n @testing-library/jest-dom \\\n svelte-jester \\\n jest \\\n jest-environment-jsdom\n"))))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add a ",(0,i.kt)("inlineCode",{parentName:"p"},"jest-setup.js")," file to configure\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/testing-library/jest-dom"},(0,i.kt)("inlineCode",{parentName:"a"},"@testing-library/jest-dom")),", if using."),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-ts",metastring:'title="jest-setup.js"',title:'"jest-setup.js"'},"import '@testing-library/jest-dom'\n"))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Configure Jest to use jsdom, transform Svelte files, and use your setup file"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-js",metastring:'title="jest.config.js"',title:'"jest.config.js"'},"export default {\n transform: {\n '^.+\\\\.svelte$': 'svelte-jester',\n },\n moduleFileExtensions: ['js', 'svelte'],\n extensionsToTreatAsEsm: ['.svelte'],\n testEnvironment: 'jsdom',\n setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],\n}\n")),(0,i.kt)("admonition",{parentName:"li",type:"note"},(0,i.kt)("p",{parentName:"admonition"},"If you are using Svelte 5, you must use ",(0,i.kt)("inlineCode",{parentName:"p"},"svelte-jester@5")," or later, and you\nwill need to make additional changes to your Jest configuration."),(0,i.kt)("ul",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ul"},"Update ",(0,i.kt)("inlineCode",{parentName:"li"},"transform")," to compile ",(0,i.kt)("inlineCode",{parentName:"li"},".svelte.(js|ts)")," modules"),(0,i.kt)("li",{parentName:"ul"},"Allow ",(0,i.kt)("inlineCode",{parentName:"li"},"@testing-library/svelte")," to be transformed, even though it's in\n",(0,i.kt)("inlineCode",{parentName:"li"},"node_modules"))),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-diff",metastring:'title="jest.config.js"',title:'"jest.config.js"'}," export default {\n transform: {\n- '^.+\\\\.svelte$': 'svelte-jester',\n+ '^.+\\\\.svelte(\\\\.(js|ts))?$': 'svelte-jester',\n },\n+ transformIgnorePatterns: [\n+ '/node_modules/(?!@testing-library/svelte/)',\n+ ],\n moduleFileExtensions: ['js', 'svelte'],\n extensionsToTreatAsEsm: ['.svelte'],\n testEnvironment: 'jsdom',\n setupFilesAfterEnv: ['<rootDir>/jest-setup.js'],\n }\n")))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Add the following to your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.json")),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-json",metastring:'title="package.json"',title:'"package.json"'},'{\n "scripts": {\n "test": "npx --node-options=\\"--experimental-vm-modules\\" jest src",\n "test:watch": "npx --node-options=\\"--experimental-vm-modules\\" jest src --watch"\n }\n}\n'))),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Create your component + test file (checkout the rest of the docs to see how)\nand run it"),(0,i.kt)(s.Z,{groupId:"npm2yarn",mdxType:"Tabs"},(0,i.kt)(l.Z,{value:"npm",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npm test\n"))),(0,i.kt)(l.Z,{value:"yarn",label:"Yarn",mdxType:"TabItem"},(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"yarn test\n")))))),(0,i.kt)("h3",{id:"typescript-and-preprocessors"},"TypeScript and preprocessors"),(0,i.kt)("p",null,"To use TypeScript with Jest, you'll need to install and configure\n",(0,i.kt)("inlineCode",{parentName:"p"},"svelte-preprocess")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"ts-jest"),". For full instructions, see the\n",(0,i.kt)("a",{parentName:"p",href:"https://github.com/svelteness/svelte-jester#typescript"},(0,i.kt)("inlineCode",{parentName:"a"},"svelte-jester")," docs"),"."),(0,i.kt)("p",null,"If you'd like include any other ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/sveltejs/svelte-preprocess"},"Svelte preprocessors"),", see\nthe ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/svelteness/svelte-jester#preprocess"},(0,i.kt)("inlineCode",{parentName:"a"},"svelte-jester")," docs"),"."))}g.isMDXComponent=!0}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.