feat: renderFileToNodeStream(filepath, scope)

This commit is contained in:
harttle
2021-10-03 21:21:25 +08:00
parent dd325362f9
commit 68c4cfcfb6
7 changed files with 107 additions and 4 deletions
+1
View File
@@ -6,6 +6,7 @@
"mocha"
],
"rules": {
"@typescript-eslint/no-var-requires": "off",
"no-unused-expressions": "off",
"no-new": "off"
}
+56
View File
@@ -0,0 +1,56 @@
import { expect, use } from 'chai'
import { resolve } from 'path'
import * as chaiAsPromised from 'chai-as-promised'
use(chaiAsPromised)
describe('.renderToNodeStream()', function () {
it('should render to stream in Node.js', done => {
const cjs = require('../../dist/liquid.node.cjs')
const engine = new cjs.Liquid()
const tpl = engine.parseFileSync(resolve(__dirname, '../stub/root/foo.html'))
const stream = engine.renderToNodeStream(tpl)
let html = ''
stream.on('data', (data: string) => { html += data })
stream.on('end', () => {
try {
expect(html).to.equal('foo')
done()
} catch (err) {
done(err)
}
})
})
it('should throw in browser', async function () {
const cjs = require('../../dist/liquid.browser.umd')
const engine = new cjs.Liquid()
const render = () => engine.renderToNodeStream('foo')
return expect(render).to.throw('streaming not supported in browser')
})
})
describe('.renderFileToNodeStream()', function () {
it('should render to stream in Node.js', async done => {
const cjs = require('../../dist/liquid.node.cjs')
const engine = new cjs.Liquid({
root: resolve(__dirname, '../stub/root/')
})
const stream = await engine.renderFileToNodeStream('foo.html')
let html = ''
stream.on('data', (data: string) => { html += data })
stream.on('end', () => {
try {
expect(html).to.equal('foo')
done()
} catch (err) {
done(err)
}
})
})
it('should throw in browser', async function () {
const cjs = require('../../dist/liquid.browser.umd')
const engine = new cjs.Liquid()
const render = () => engine.renderFileToNodeStream('foo')
return expect(render).to.throw('streaming not supported in browser')
})
})
+30 -1
View File
@@ -136,7 +136,36 @@ describe('Liquid', function () {
const stream = engine.renderToNodeStream(engine.parse('{{"foo"}}'))
let html = ''
stream.on('data', data => { html += data })
stream.on('end', () => { expect(html).to.equal('foo'); done() })
stream.on('end', () => {
try {
expect(html).to.equal('foo')
done()
} catch (err) {
done(err)
}
})
})
})
describe('#enderFileToNodeStream', function () {
before(function () {
mock({
'/root/foo.html': 'foo'
})
})
after(restore)
it('should render a simple value', (done) => {
const engine = new Liquid({ root: ['/root/'] })
engine.renderFileToNodeStream('foo.html').then(stream => {
let html = ''
stream.on('data', data => { html += data })
stream.on('end', () => {
try {
expect(html).to.equal('foo'); done()
} catch (err) {
done(err)
}
})
})
})
})
})
@@ -0,0 +1,8 @@
import { expect } from 'chai'
import { StreamedEmitter } from '../../../src/emitters/streamed-emitter-browser'
describe('emitters/streamed-emitter-browser', () => {
it('should throw when try to constructing', () => {
expect(() => new StreamedEmitter()).to.throw(/streaming not supported/)
})
})