Javascript Jest Puppeter evaluateHandle中拒绝访问扩展API

Javascript Jest Puppeter evaluateHandle中拒绝访问扩展API,javascript,google-chrome-extension,jestjs,puppeteer,Javascript,Google Chrome Extension,Jestjs,Puppeteer,我的扩展架构: 后台页存储扩展状态。我认为这很好,因为将状态保持在一个位置可以使调试更容易 内容脚本根据扩展状态在网页上执行某些操作 每次用户通过设置页面对扩展状态进行更新时,都会在后台页面进行更新,然后后台页面会向内容脚本发送一条消息,以相应地更新其数据 通过Jest+Puppeter,我打算模拟不同的状态变化并测试它们。为此,以下是我的MCVE背景页面: chrome.runtime.onInstalled.addListener(函数(详细信息)){ 如果(details.reason==

我的扩展架构:

  • 后台页存储扩展状态。我认为这很好,因为将状态保持在一个位置可以使调试更容易
  • 内容脚本根据扩展状态在网页上执行某些操作
  • 每次用户通过设置页面对扩展状态进行更新时,都会在后台页面进行更新,然后后台页面会向内容脚本发送一条消息,以相应地更新其数据
  • 通过Jest+Puppeter,我打算模拟不同的状态变化并测试它们。为此,以下是我的MCVE背景页面:

    chrome.runtime.onInstalled.addListener(函数(详细信息)){
    如果(details.reason==“安装”){
    log(“在“+新日期()安装”);
    }
    });
    window.sendMessage=函数(){
    chrome.tabs.query({},函数(tabs){
    if(chrome.runtime.lastError){
    log(chrome.runtime.lastError.message);
    }
    控制台日志(选项卡);
    如果(!tabs)返回;
    用于(选项卡中的常量选项卡){
    如果(tab.url&&/^https:\/\/.test(tab.url)){
    sendMessage(tab.id,{“message”:“hey”});
    }
    }
    });
    };
    console.log(“定义的fn”+window.sendMessage)
    
    以及下面的
    test.js

    /**
    *等待给定的毫秒
    *@param{Number}毫秒等待
    */
    函数睡眠(毫秒){
    返回新承诺((解决)=>{
    setTimeout(()=>resolve(),毫秒);
    });
    }
    //一些随机网页
    常量testURL=[
    {
    网址:
    "https://stackoverflow.com/questions/50990292/"
    +“使用八进制字符给出警告多字符字符常量”,
    },
    {
    网址:
    "https://serverfault.com/questions/971011/"
    +“如何检查是否可以从ubuntu apache ph访问active directory服务器”,
    },
    ];
    const usablePages=[],
    玩笑超时=60000;
    /*
    *添加此项,因为jest的默认超时仅为5s;加载页面可能需要更长的时间
    */
    jest.setTimeout(jest\u TIMEOUT);
    异步函数getBackgroundPage(){
    const targets=wait browser.targets(),
    backgroundPageTarget=targets.find(
    target=>target.type(),
    ),
    backgroundPage=等待backgroundPageTarget.page();
    返回背景页;
    }
    异步函数sendMsgs(){
    const bgPage=等待getBackgroundPage();
    等待bgPage.evaluateHandle(`window.sendMessage();`);
    }
    之前(异步()=>{
    for(testURL的常量testURL){
    const usablePage=wait browser.newPage();
    wait usablePage.setViewport({宽度:1920,高度:1080});
    等待usablePage.goto(testURL.url);
    }
    //用于调试,所以您可以打开控制台并在15秒内签入
    等待睡眠(15000);
    sendMsgs();
    等待睡眠(15000);
    });
    它(“简单测试”,函数(){
    期望(2),期望(2);
    });
    
    此代码为我提供了以下
    运行时。lastError

    对扩展API的访问被拒绝

    我已经在我的
    manifest.json
    中声明了
    [“tabs”,“”]
    权限。我还可以做些什么来解决此问题

    我的小丑木偶师配置:

    constpathtoextension=require(“路径”).join(uu dirname,“dist”);
    module.exports={
    发布:{
    无头:错,
    args:[
    `--禁用扩展,除了=${pathToExtension}`,
    `--加载扩展=${pathToExtension}`,
    “--单一进程”,
    ],
    斯洛莫:250,
    },
    };