gpt4 book ai didi

javascript - TypeError : Method Promise.原型(prototype)。然后在不兼容的接收器代理上调用

转载 作者:行者123 更新时间:2023-12-04 01:26:04 29 4
gpt4 key购买 nike

为了执行集成测试,我使用了 jasminepuppeteer并且由于我正在通过教育类(class),因此,我决定使用 js 代理来封装测试功能,但是当我进行测试时,我会遇到以下错误

TypeError: Method Promise.prototype.then called on incompatible receiver [object Object] 

这是我的 CustomPage 类,它将代表一个 chrome 选项卡:
const puppeteer = require('puppeteer');
class CustomPage{
static async build(){
const browser =await puppeteer.launch({headless:false});
const page = browser.newPage();

var customPage = new CustomPage(page);
console.log("harchi run mishe")
return new Proxy(customPage,{
get:function(target,property){
return (customPage[property]||page[property]||browser[property])
}
})
//return proxy;
}

constructor(page){
this.page = page
}
}


module.exports=CustomPage;

这是我的 header.spec.js文件,这是我的测试文件。
const Page = require('./helpers/page');
var tab;

describe('header representation',()=>{
beforeEach(async(done)=>{
tab =await Page.build();****here is the problem********
await tab.goto('localhost:3000');
})

it('should show header logo',async()=>{
const text = await tab.$eval('a.brand-logo',(el)=>el.innerHTML);
expect(text).toEqual('Blogster');
//done()
})
})

我实际上已经确定我的问题出在指定的行上。似乎 js 不能将代理视为 Promise,但我找不到任何解决方案。

最佳答案

为了后代,我发现使用代理你需要重新绑定(bind) javascript 的 this关键词。例子:

function validator(promise, prop) {
if (prop in promise || promise.hasOwnProperty(prop)) {
if (typeof promise[prop] === 'function') {
return promise[prop].bind(promise); // << Important part!
}
return promise[prop];
}

return 'Fake!';
}

const proxy = new Proxy(
Promise.resolve('Testing 1 2 3'),
validator
);

console.log(proxy.someFakeThing); // prints 'Fake!'

proxy.then(console.log); // Prints 'Testing 1 2 3'

关于javascript - TypeError : Method Promise.原型(prototype)。然后在不兼容的接收器代理上调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53872760/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com