使用HTMLRewriter测试cloudflare工作者失败,因为未定义

问题描述

我有一个测试来测试我的cloudflare工作者,如下所示:

const workerScript = fs.readFileSync(
    path.resolve(__dirname,'../pkg-prd/worker.js'),'utf8'
);

describe('worker unit test',function () {
    // this.timeout(60000);
    let worker;

    beforeEach(() => {
        worker = new Cloudworker(workerScript,{
            bindings: {
                HTMLRewriter
            },});
    });

    it('tests requests and responses',async () => {
        const request = new Cloudworker.Request('https://www.example.com/pathname')
        const response = await worker.dispatch(request);
        console.log(response);
        // const body = await response.json();
        expect(response.status).to.eql(200);
        // expect(body).to.eql({message: 'Hello mocha!'});
    });
});

在我的工人中,我做这样的事情:

 const response = await fetch(BASE_URL,request);
        const modifiedResponse = new Response(response.body,response);

        // Remove the webflow badge
        class ElementHandler {
            element(element) {
                element.append('<style type="text/css">body .w-webflow-badge {display: none!important}</style>',{html: true})
            }
        }
        console.log(3);

        return new HTMLRewriter()
            .on('head',new ElementHandler()).transform(modifiedResponse);

现在,当我运行测试时,会显示以下错误消息:

  ● worker unit test › tests requests and responses

TypeError: Cannot read property 'transform' of undefined

  at evalmachine.<anonymous>:1:1364
  at FetchEvent.respondWith (node_modules/@dollarshaveclub/cloudworker/lib/cloudworker.js:39:17)

怎么了?

我创建的HTMLRewriter看起来像这样:

function HTMLRewriter() {
    const elementHandler = {};

    const on = (selector,handler) => {
        if (handler && handler.element) {
            if (!elementHandler[selector]) {
                elementHandler[selector] = [];
            }
            elementHandler[selector].push(handler.element.bind(handler));
        }
    };

    const transform = async response => {
        const tempResponse = response.clone();

        const doc = HTMLParser.parse(await tempResponse.text());
        Object.keys(elementHandler).forEach(selector => {
            const el = doc.querySelector(selector);
            if (el) {
                elementHandler[selector].map(callback => {
                    callback(new _Element(el));
                });
            }
        });

        return new Response(doc.toString(),response);
    };

    return {
        on,transform
    };
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)