使用puppeteer

时间:2018-10-19 12:34:17

标签: javascript unit-testing jestjs puppeteer jest-puppeteer

我想要的

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

问题

主要问题是操纵up的人设计为在页面上下文之外运行e2e测试。我发现没有办法执行具体的测试套件内部页面上下文,因为jsdom不能通过公共接口/ GUI运行整个构建,而这会杀死整个单元测试思想。

我尝试过的事情

我试图编写自定义测试环境以在puppeteer页面中运行每个测试套件。评估可以访问窗口对象的上下文:

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;
   }
  }
};

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

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

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

0 个答案:

没有答案