import fs from 'node:fs/promises' import { fileURLToPath } from 'node:url' describe('static data file support in vite 3', () => { beforeAll(async () => { await goto('/data-loading/data') }) test('render correct content', async () => { expect(await page.textContent('pre#basic')).toMatchInlineSnapshot(` "[ { "a": true }, { "b": true } ]" `) expect(await page.textContent('pre#content')).toMatchInlineSnapshot(` "[ { "src": "---\\ntitle: bar\\n---\\n\\nHello\\n\\n---\\n\\nworld\\n", "html": "

Hello

\\n
\\n

world

\\n", "frontmatter": { "title": "bar" }, "excerpt": "

Hello

\\n", "url": "/data-loading/content/bar.html", "transformed": true }, { "src": "---\\ntitle: foo\\n---\\n\\nHello\\n\\n---\\n\\nworld\\n", "html": "

Hello

\\n
\\n

world

\\n", "frontmatter": { "title": "foo" }, "excerpt": "

Hello

\\n", "url": "/data-loading/content/foo.html", "transformed": true } ]" `) }) // TODO: make it `.runIf(!process.env.VITE_TEST_BUILD)` -- it currently works, but is skipped to avoid vite's ecosystem-ci from failing (https://github.com/vitejs/vite/pull/16471#issuecomment-2308437187) test.skip('hmr works', async () => { const a = fileURLToPath(new URL('./data/a.json', import.meta.url)) const b = fileURLToPath(new URL('./data/b.json', import.meta.url)) try { await fs.writeFile(a, JSON.stringify({ a: false }, null, 2) + '\n') await page.waitForFunction( () => document.querySelector('pre#basic')?.textContent === JSON.stringify([{ a: false }, { b: true }], null, 2), undefined, { timeout: 3000 } ) } finally { await fs.writeFile(a, JSON.stringify({ a: true }, null, 2) + '\n') } let err = true try { await fs.unlink(b) await page.waitForFunction( () => document.querySelector('pre#basic')?.textContent === JSON.stringify([{ a: true }], null, 2), undefined, { timeout: 3000 } ) err = false } finally { if (err) { await fs.writeFile(b, JSON.stringify({ b: true }, null, 2) + '\n') } } try { await fs.writeFile(b, JSON.stringify({ b: false }, null, 2) + '\n') await page.waitForFunction( () => document.querySelector('pre#basic')?.textContent === JSON.stringify([{ a: true }, { b: false }], null, 2), undefined, { timeout: 3000 } ) } finally { await fs.writeFile(b, JSON.stringify({ b: true }, null, 2) + '\n') } }) /* MODIFY a.json with { a: false } this should trigger a hmr update and the content should be updated to [{ a: false }, { b: true }] reset a.json DELETE b.json this should trigger a hmr update and the content should be updated to [{ a: true }] reset b.json if failed CREATE b.json with { b: false } this should trigger a hmr update and the content should be updated to [{ a: true }, { b: false }] reset b.json */ })