render.test.mjs
1.04 KB
import { test } from 'node:test'
import assert from 'node:assert/strict'
import { render } from './render.mjs'
test('replaces placeholders', () => {
assert.equal(render('Hi {{name}}', { name: 'Al' }), 'Hi Al')
})
test('value containing $ and braces is inserted literally', () => {
assert.equal(render('v={{x}}', { x: '${FOO} a{b}c }}' }), 'v=${FOO} a{b}c }}')
})
test('strips HTML comments used as template guides', () => {
assert.equal(render('a<!-- note -->b', {}), 'ab')
})
test('missing key throws (no silent blank)', () => {
assert.throws(() => render('{{missing}}', {}), /missing/)
})
test('inherited prototype keys are treated as missing (not silently rendered)', () => {
// {{constructor}} / {{toString}} 不应沿原型链命中继承函数渲染出垃圾
assert.throws(() => render('{{constructor}}', {}), /missing var "constructor"/)
assert.throws(() => render('{{toString}}', {}), /missing var "toString"/)
// 但 own 属性即便名为 constructor 也应正常渲染
assert.equal(render('{{constructor}}', { constructor: 'X' }), 'X')
})