Запускать шутные юнит-тесты в реальной среде браузера с доступом к окну при помощи кукловода - PullRequest
0 голосов
/ 19 октября 2018

Что я хочу

Мой код широко зависит от объекта глобального окна (и его методов), который не полностью реализован jsdom, но доступен в реальной среде браузера.Поэтому я хочу запустить модульные тесты в среде контекста страницы кукловода, чтобы покрытый код (и его зависимости) мог получить доступ к реальному объекту окна.

Проблема

Основная проблема заключается в том, чтоPuppeteer предназначен для запуска тестов e2e вне контекста страницы.Я не нахожу способа выполнить конкретный тестовый костюм в контексте страницы , как это делает jsdom, не выполняя целую сборку, хотя это общедоступный интерфейс / графический интерфейс пользователя (который убивает всю идею модульного теста).

Чтоя попытался

Я пытался написать пользовательскую среду тестирования для запуска каждого набора тестов внутри страницы 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;
  }
};
...