Cypress Browser автозагрузка в режиме реального времени не работает - PullRequest
1 голос
/ 24 октября 2019

Как следует из названия, я должен использовать Cypress Test Runner, чтобы видеть результаты каждый раз, когда я меняю свой код. Но согласно инструкции, это должна быть автоматическая перезагрузка и отображение результатов в режиме реального времени.

ОС: Windows 10 Chrome: версия 78.0.3904.70

1 Ответ

0 голосов
/ 25 октября 2019

Вот два решения, основанные на том, есть ли у вас шаг сборки или нет.

  1. Если у вас нет шага сборки, то это довольно просто:

    В вашем cypress/plugins/index.js:

    1. Получите дескрипторы файлов спецификационных файлов, которые в данный момент работают, чтобы вы могли генерировать на них событие rerun.
    2. Настройте chokidar (или аналогичный) наблюдатель, прослушайте изменения вашего файла и повторно запустите спецификацию.

      // (1) setup to obtain file handles 
      // ------------------------------------------------------
      
      let openFiles = [];
      
      module.exports = ( on ) => {
          on('file:preprocessor', file => {
              if (
                  /\.spec\.js/.test(file.filePath) &&
                  !openFiles.find(f => f.filePath === file.filePath)
              ) {
      
                  openFiles.push(file);
      
                  file.on('close', () => {
                      openFiles = openFiles.filter(f => f.filePath !== file.filePath);
                  });
              }
      
              // tells cypress to not compile the file. If you normally
              //  compile your spec or support files, then instead of this line,
              //  return whatever you do for compilation
              return file.filePath;
          });
      
          on('before:browser:launch', () => {
              openFiles = [];
          });
      };
      
      // (2) watching and re-running logic
      // ------------------------------------------------------
      
      chokidar.watch([ /* paths/to/watch */ ])
          .on( "change", () => rerunTests());
      
      function rerunTests () {        
          // https://github.com/cypress-io/cypress/issues/3614
          const file = openFiles[0];
          if ( file ) file.emit('rerun');
      }
      
  2. Если вышаг сборки, рабочий процесс более сложным. Я не буду вдаваться в подробности реализации, но только для того, чтобы получить общее представление:

    1. Настройка канала IPC при запуске средства отслеживания сборки и при сохранении файла икомпиляция, генерация события did-compile или аналогичного.
    2. Логика в cypress/plugins/index.js в основном остается такой же, как и в предыдущем решении, но вместо наблюдателя chokidar вы будете подписываться на did-compile сервера IPCсобытие и повторно запустить спецификации, когда событие генерируется.

Для получения дополнительной информации см. API препроцессоров и cypress-io /кипарис-часы-препроцессор .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...