ReferenceError: TransformStream не определен - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь протестировать реализацию Fast Google Fonts с Cloudflare Workers из блога Cloudflare для встраивания таблицы стилей Google Fonts непосредственно в 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;
}

Этот тест выглядит примерно так this, где мы в основном ожидаем, что ссылка на таблицу стилей будет заменена самой таблицей стилей, содержащей все стили @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? Нужен ли какой-нибудь полифилл?

Связано: Потоки Cloudflare

1 Ответ

1 голос
/ 08 мая 2020

TransformStream является частью Streams API , стандарта на стороне браузера. Это не реализовано в Node (потому что у них были свои собственные потоки задолго до того, как появился этот spe c), поэтому вам понадобится полифилл при тестировании вашего кода в Node.

Кстати, пример, который вы следуете довольно старый. В наши дни было бы лучше использовать HTMLRewriter для реализации такого рода преобразований - это гораздо более эффективно для перезаписи HTML, в частности. (Однако это особенность c Cloudflare, поэтому вы вообще не сможете протестировать ее под Node.)

...