Skip to content

Commit 3a2691b

Browse files
committed
fix: add test
1 parent 7bb223a commit 3a2691b

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

spec/integration.spec.ts

+61
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,65 @@ describe('custom locale detection', () => {
140140
expect(res.body).toEqual(translated[locale])
141141
}
142142
})
143+
test('async parallel', async () => {
144+
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
145+
146+
const loader = (path: string) => import(path).then((m) => m.default || m)
147+
const messages: Record<string, () => ReturnType<typeof loader>> = {
148+
en: () => loader('./fixtures/en.json'),
149+
ja: () => loader('./fixtures/ja.json'),
150+
}
151+
152+
// async locale detector
153+
const localeDetector = async (
154+
event: H3Event,
155+
i18n: CoreContext<string, DefineLocaleMessage>,
156+
) => {
157+
const locale = getQueryLocale(event).toString()
158+
await sleep(100)
159+
const loader = messages[locale]
160+
if (loader && !i18n.messages[locale]) {
161+
const message = await loader()
162+
i18n.messages[locale] = message
163+
}
164+
return locale
165+
}
166+
167+
const middleware = defineI18nMiddleware({
168+
locale: localeDetector,
169+
messages: {
170+
en: {
171+
hello: 'hello, {name}',
172+
},
173+
},
174+
})
175+
app = createApp({ ...middleware })
176+
request = supertest(toNodeListener(app))
177+
178+
app.use(
179+
'/',
180+
eventHandler(async (event) => {
181+
await sleep(100)
182+
const t = await useTranslation(event)
183+
await sleep(100)
184+
return { message: t('hello', { name: 'h3' }) }
185+
}),
186+
)
187+
188+
const translated: Record<string, { message: string }> = {
189+
en: {
190+
message: 'hello, h3',
191+
},
192+
ja: {
193+
message: 'こんにちは, h3',
194+
},
195+
}
196+
// request in parallel
197+
const resList = await Promise.all(
198+
['en', 'ja'].map((locale) =>
199+
request.get(`/?locale=${locale}`).then((res: { body: string }) => res.body)
200+
),
201+
)
202+
expect(resList).toEqual([translated['en'], translated['ja']])
203+
})
143204
})

0 commit comments

Comments
 (0)