问题描述
我有一个测试来测试我的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 (将#修改为@)