小编use*_*811的帖子

使用puppeteer在具有窗口访问权限的真实浏览器环境中运行jest单元测试

我想要的是

我的代码广泛依赖于全局窗口对象(及其方法),而jsdom并未完全实现该对象,但在实际的浏览器环境中可用。因此,我想在操纵up页面上下文环境中运行单元测试,以便覆盖的代码(及其依赖项)可以访问真实的窗口对象。

问题

主要的问题是操纵up的人设计为在页面上下文之外运行e2e测试。我发现没有办法像jsdom那样在页面上下文中执行具体的测试套件,尽管它是公共接口/ GUI(这杀死了整个单元测试的想法),但没有运行整个构建。

我尝试了什么

我试图编写自定义测试环境以在puppeteer page.evaluate上下文中运行每个测试套件,该上下文可以访问窗口对象:

const PuppeteerEnvironment = require('jest-environment-puppeteer');

module.exports = class TestEnvironment extends PuppeteerEnvironment {
  constructor(config) {
    super(config);
  }

  async runScript(script){
   if(this.global.page){
     return await this.global.page.evaluate((runner, script)=>{
       return runner(script);
     }, super.runScript, script)
   } else{
     return null;
   }
  }
};
Run Code Online (Sandbox Code Playgroud)

但是,似乎puppeteer序列化了评估参数,所以我找不到在上下文中进行runScript调用的方法。

我也尝试将评估窗口对象克隆到全局变量中,但由于相同的原因没有运气(序列化问题)

 async setup(config){
   const setupResult = await super.setup(config);
   const window = await this.global.page.evaluate( () => window)
   this.globals.window = window;
   return setupResult;
  }
};
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jestjs puppeteer jest-puppeteer

8
推荐指数
1
解决办法
584
查看次数

通过 Kinetic.js 文本元素中的字符串索引获取单词/字符屏幕位置

输入:

一些包含常规单词和特殊单词/字符的文本,以 # 分隔。Font 和 fontSize 是不变的,假设 Arial 14 没有任何样式。例如:

Lorem ipsum dolor #sit# amet,consectetur adipisicing elit,sed do eiusmod tempor incididunt ut Labore #et# dolore magna aliqua。Ut enim ad minim veniam, quis nostrud exeritation ullamco labouris nisi ut aliquip ex ea commodo consequat. Duis #aute# irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。#sint# occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est labourum。

输出:

当用户单击 #someSeparatedWord# 时,我需要在控制台中记录该单词(在我的示例中,用户可以单击“sit”、“et”、“aute”、“sint”,它只会记录这些单词)。那么问题在于如何获取或计算这个单词/字符画布坐标?

html javascript canvas html5-canvas kineticjs

4
推荐指数
1
解决办法
2716
查看次数