| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import assert from 'node:assert/strict'
- import { readFile } from 'node:fs/promises'
- import ts from 'typescript'
- const unitId = 'SHEP-5-上-Unit2'
- const topics = JSON.parse(
- await readFile(new URL('../src/views/Editor/EnglishSpeaking/data/topicDiscussionTasks.json', import.meta.url), 'utf8'),
- )
- const articles = JSON.parse(
- await readFile(new URL('../src/views/Editor/EnglishSpeaking/data/articleReadingTasks.json', import.meta.url), 'utf8'),
- )
- const article = articles[unitId][0]
- // 模型的所有导入都是 `import type`,转译后被抹除,因此模块自足、可直接在 Node 里跑。
- const sourceUrl = new URL('../src/views/Editor/EnglishSpeaking/preview/articleReadingModel.ts', import.meta.url)
- const source = await readFile(sourceUrl, 'utf8')
- const compiled = ts.transpileModule(source, {
- compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2020 },
- }).outputText
- const mod = await import(`data:text/javascript,${encodeURIComponent(compiled)}#${Math.random()}`)
- const empty = mod.buildEmptyArticleConfig('五年级')
- assert.deepEqual(empty, {
- type: 'article',
- grade: '五年级',
- title: '',
- content: '',
- practice: { mode: 'time', duration: 10 },
- evaluation: { showReport: true },
- })
- const fromTask = mod.buildArticleConfig(article, '五年级')
- assert.equal(fromTask.type, 'article')
- assert.equal(fromTask.grade, '五年级')
- assert.equal(fromTask.title, 'A Day at the Zoo')
- assert.equal(fromTask.content, article.content)
- assert.equal(mod.scoreToStars(0), 0)
- assert.equal(mod.scoreToStars(79), 3.95)
- assert.equal(mod.scoreToStars(100), 5)
- const allTasks = [...topics[unitId], article]
- assert.equal(mod.filterSpeakingTasks(allTasks, 'all').length, 5)
- assert.equal(mod.filterSpeakingTasks(allTasks, 'topic-discussion').length, 4)
- assert.equal(mod.filterSpeakingTasks(allTasks, 'article-reading').length, 1)
- assert.equal(mod.isFinalReportReady({ paragraphs: [{ status: 'generating' }], overallStatus: null }), false)
- assert.equal(mod.isFinalReportReady({ paragraphs: [{ status: 'completed' }], overallStatus: null }), true)
- assert.equal(mod.isFinalReportReady({ paragraphs: [{ status: 'failed' }], overallStatus: 'failed' }), true)
- assert.equal(mod.pollDelayMs(0), 1000)
- assert.equal(mod.pollDelayMs(5), 8000)
|