ReferenceError: TransformStream is not defined
ReferenceError: TransformStream is not defined
我正在尝试测试 Fast Google Fonts with Cloudflare Workers 的实现,来自 Cloudflare 的博客,用于将 Google 字体样式表直接内联到 HTML。当通过 Cloudflare worker 运行 时,实施本身似乎工作正常。但是我写了一些测试,当 运行 测试时,我得到这个错误,说 TransformStream
没有定义。
当 运行 我的 Jest 通过 npm run test
测试时出错:
ReferenceError: TransformStream is not defined
这是测试命中的代码:
async function processHtmlResponse(request, response) {
...
// This is where the reference error comes up
const { readable, writable } = new TransformStream();
const newResponse = new Response(readable, response);
modifyHtmlStream(response.body, writable, request, embedStylesheet);
return newResponse;
}
这个测试看起来像这样,我们基本上期望样式表 link 将被样式表本身替换,包含所有 @font-face
样式。
describe('inlineGoogleFontsHtml', () => {
it('inlines the response of a Google Fonts stylesheet link within an HTML response', async () => {
const request = new Request('https://example.com')
const response = new Response(
'<html><head><link rel="stylesheet" media="screen" href="https://fonts.googleapis.com/css?family=Lato:300"></head><body></body></html>',
{
headers: {
'Content-Type': 'text/html'
}
}
)
const rewrittenResponse = processHtmlResponse(request, response)
const rewrittenResponseText = await rewrittenResponse.text()
expect(rewrittenResponseText).toContain('@font-face')
})
我不太确定问题出在哪里。 TransformStream
在 Node 中工作吗?是否需要一些 polyfill?
TransformStream
是浏览器端标准 Streams API 的一部分。它不是由 Node 实现的(因为它们在本规范存在之前很久就有自己的流),因此在 Node 中测试代码时需要一个 polyfill。
顺便说一句,您所遵循的示例相当古老。现在,最好使用 HTMLRewriter 来实现这种转换——专门重写 HTML 效率更高。 (但是,它是 Cloudflare 特定的功能,因此您根本无法在 Node 下对其进行测试。)
我正在尝试测试 Fast Google Fonts with Cloudflare Workers 的实现,来自 Cloudflare 的博客,用于将 Google 字体样式表直接内联到 HTML。当通过 Cloudflare worker 运行 时,实施本身似乎工作正常。但是我写了一些测试,当 运行 测试时,我得到这个错误,说 TransformStream
没有定义。
当 运行 我的 Jest 通过 npm run test
测试时出错:
ReferenceError: TransformStream is not defined
这是测试命中的代码:
async function processHtmlResponse(request, response) {
...
// This is where the reference error comes up
const { readable, writable } = new TransformStream();
const newResponse = new Response(readable, response);
modifyHtmlStream(response.body, writable, request, embedStylesheet);
return newResponse;
}
这个测试看起来像这样,我们基本上期望样式表 link 将被样式表本身替换,包含所有 @font-face
样式。
describe('inlineGoogleFontsHtml', () => {
it('inlines the response of a Google Fonts stylesheet link within an HTML response', async () => {
const request = new Request('https://example.com')
const response = new Response(
'<html><head><link rel="stylesheet" media="screen" href="https://fonts.googleapis.com/css?family=Lato:300"></head><body></body></html>',
{
headers: {
'Content-Type': 'text/html'
}
}
)
const rewrittenResponse = processHtmlResponse(request, response)
const rewrittenResponseText = await rewrittenResponse.text()
expect(rewrittenResponseText).toContain('@font-face')
})
我不太确定问题出在哪里。 TransformStream
在 Node 中工作吗?是否需要一些 polyfill?
TransformStream
是浏览器端标准 Streams API 的一部分。它不是由 Node 实现的(因为它们在本规范存在之前很久就有自己的流),因此在 Node 中测试代码时需要一个 polyfill。
顺便说一句,您所遵循的示例相当古老。现在,最好使用 HTMLRewriter 来实现这种转换——专门重写 HTML 效率更高。 (但是,它是 Cloudflare 特定的功能,因此您根本无法在 Node 下对其进行测试。)