Настройка Nightwatch Babel 7: Неожиданный идентификатор - PullRequest
0 голосов
/ 28 февраля 2019

Недавно я попробовал Babel 7 в своем проекте React.Путь обновления, несмотря на сложность, на самом деле был довольно гладким.Тем не менее, я застрял на установке Nightwatch с Babel 7. Вся документация, которую я смог найти, касается Babel 6, которая немного отличается.Я все еще пытался пойти так далеко, как только мог, но застрял в какой-то момент, не имея пути к решению.Я на React 16.8.3, Nightwatch 1.0.18 и Babel 7, я обновил все зависимости в соответствии с официальной документацией.

Вот мой конфиг Nightwatch:

require('@babel/register')({
  extends: './.babelrc',
  extensions: '.js',
});

const reportBucket = 'admin';
const reportFolder = `./reports/${reportBucket}`;
const screenshotFolder = `/nightwatch/screenshots/${reportBucket}`;

module.exports = {
  src_folders: ['./specs'],
  output_folder: reportFolder,
  page_objects_path: './pages',
  custom_commands_path: './commands',
  globals_path: './globals.js',
  test_settings: {
    default: {
      launch_url: process.env.TEST_URL.replace(':443', ''),
      selenium_host: process.env.SELENIUM_HOST,
      selenium_port: process.env.SELENIUM_PORT,
      silent: true,
      end_session_on_fail: false, // keep session open to get screenshot on teardown
      use_xpath: true,
      request_timeout_options: {
        timeout: 300000,
      },
      screenshots: {
        enabled: true,
        path: screenshotFolder,
        on_failure: true,
        on_error: true,
      },
      desiredCapabilities: {
        'browserstack.use_w3c': 'true',
        'browserstack.user': process.env.BROWSERSTACK_USER,
        'browserstack.key': process.env.BROWSERSTACK_ACCESS_KEY,
        'browserstack.local': true,
        'browserstack.localIdentifier': process.env.BROWSERSTACK_LOCAL_ID,
        'browserstack.selenium_version': process.env.SELENIUM_VERSION,
        project: 'TEST',
        build: process.env.BUILD_TAG,
        name: process.env.SELENIUM_BROWSERS,
        resolution: '1920x1080',
        javascriptEnabled: true,
        acceptSslCerts: true,
        browserName: 'chrome',
        acceptInsecureCerts: true,
      },
    },
    chrome: {
      desiredCapabilities: {
        os: 'windows',
        os_version: '10',
        browserName: 'chrome',
        browser_version: '71.0',
        'goog:chromeOptions': {
          args: [
            '--enable-automation',
            '--disable-web-security',
            '--disable-infobars',
          ],
        },
      },
    },
    firefox: {
      desiredCapabilities: {
        /*
          react-select does not work when the browser is not
          the app in focus in the OS.
          This was failing all tests that included this component
          so we exculsively run on windows on browserstack
          to avoid this issue
          the core of the issue is that when firefox not in focus, 'mousedown'
          is not triggered. All other selenium events seem fine (click, key, etc)
        */
        os: 'windows',
        os_version: '10',
        browserName: 'firefox',
        browser_version: '64.0',
        marionette: true,
        acceptInsecureCerts: true,
      },
    },
    ie11: {
      desiredCapabilities: {
        /*
          windows 10 needed so input values are
          cleared and set properly. win 8 driver has issues
        */
        os: 'windows',
        os_version: '10',
        browserName: 'ie',
        browser_version: '11.0',
        acceptInsecureCerts: true,
      },
    },
    edge: {
      desiredCapabilities: {
        os: 'windows',
        os_version: '10',
        browserName: 'edge',
        browser_version: '17.0',
        acceptInsecureCerts: true,
      },
    },
  },
  parallel_process_delay: 1000,
  live_output: true,
  test_workers: {
    enabled: true,
    workers: parseInt(process.env.TEST_WORKERS, 10) || 1,
  },
};

Обратите внимание, что яиспользуйте @ babel / register вверху (обновление от babel-register

После публикации этого поста: https://babeljs.io/docs/en/v7-migration Я также обновил свой .babelrc для своего ночного контрольного костюма следующим образом:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": false,
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

При такой конфигурации, если я пытаюсь запустить какой-либо тест Nightwatch, я получаю следующее:

  TEST FAILURE: 1 error during execution 0 tests failed, 0 passed. 104ms

  Unexpected identifier
   import test from '../../../lib/random';
          ^^^^

   SyntaxError: Unexpected identifier
       at new Script (vm.js:79:7)
       at createScript (vm.js:251:10)
       at Object.runInThisContext (vm.js:303:10)
       at Module._compile (internal/modules/cjs/loader.js:657:28)
       at Module._extensions..js (internal/modules/cjs/loader.js:700:10)
       at Module.load (internal/modules/cjs/loader.js:599:32)
       at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
       at Function.Module._load (internal/modules/cjs/loader.js:530:3)

Кто-нибудь смог исправить подобную проблему? Я пробовал разные конфигурации babel, но могу 'Кажется, он работает.

1 Ответ

0 голосов
/ 01 марта 2019

Хорошо, после осмотра я нашел конфигурацию babel для babel 7, которая решает эту проблему:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "modules": "commonjs",
        "targets": {
          "node": "current"
        }
      }
    ]
  ],
  "plugins": [
    "add-module-exports",
  ]
}
...