Skip to content

Commit

Permalink
chore: add tests for data loader hmr
Browse files Browse the repository at this point in the history
  • Loading branch information
brc-dd committed Aug 24, 2024
1 parent d062732 commit 612d66f
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 14 deletions.
14 changes: 5 additions & 9 deletions __tests__/e2e/data-loading/basic.data.mts
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,10 @@ export declare const data: Data
export default defineLoader({
watch: ['./data/*'],
async load(files: string[]): Promise<Data> {
const foo = fs.readFileSync(
files.find((f) => f.endsWith('foo.json'))!,
'utf-8'
)
const bar = fs.readFileSync(
files.find((f) => f.endsWith('bar.json'))!,
'utf-8'
)
return [JSON.parse(foo), JSON.parse(bar)]
const data: Data = []
for (const file of files.sort().filter((file) => file.endsWith('.json'))) {
data.push(JSON.parse(fs.readFileSync(file, 'utf-8')))
}
return data
}
})
70 changes: 68 additions & 2 deletions __tests__/e2e/data-loading/data.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
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')
Expand All @@ -7,10 +10,10 @@ describe('static data file support in vite 3', () => {
expect(await page.textContent('pre#basic')).toMatchInlineSnapshot(`
"[
{
"foo": true
"a": true
},
{
"bar": true
"b": true
}
]"
`)
Expand Down Expand Up @@ -39,4 +42,67 @@ describe('static data file support in vite 3', () => {
]"
`)
})

test.runIf(!process.env.VITE_TEST_BUILD)('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
*/
})
3 changes: 3 additions & 0 deletions __tests__/e2e/data-loading/data/a.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"a": true
}
3 changes: 3 additions & 0 deletions __tests__/e2e/data-loading/data/b.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"b": true
}
1 change: 0 additions & 1 deletion __tests__/e2e/data-loading/data/bar.json

This file was deleted.

1 change: 0 additions & 1 deletion __tests__/e2e/data-loading/data/foo.json

This file was deleted.

2 changes: 1 addition & 1 deletion src/node/plugins/staticDataPlugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ export const staticDataPlugin: Plugin = {
},

transform(_code, id) {
if (server && loaderMatch.test(id)) {
if (server && loaderMatch.test(id) && '_importGlobMap' in server) {
// register this module as a glob importer
const { watch } = idToLoaderModulesMap[id]!
if (watch) {
Expand Down

0 comments on commit 612d66f

Please sign in to comment.