Синтаксическая ошибка: неожиданный токен { — ошибка при выполнении теста protractor cucumber

#angular #typescript #protractor #cucumber

#angular #typescript #транспортир #cucumber

Вопрос:

Я просто пытаюсь начать с настройки теста Protractor- Cucumber, и ниже приведена моя базовая настройка, которую я выполнил, следуя некоторым онлайн-урокам. Спасибо Самаритянину, который поделился этим.

Проблема в том, что когда я пытаюсь запустить его, я получаю неожиданный токен ошибки для импорта. Я понятия не имею, почему он это дает. Любая помощь будет очень признательна.

Ниже приведены версии node и т.д., которые я использую —

 C:UsersA>npm --version
6.4.1

C:UsersA>node --version
v10.15.1

C:UsersA>protractor --version
Version 5.4.2
 

Ниже приведен мой файл функций —

 Feature: Go to the home
  Display the title

  Scenario: Home Page
    Given I am on the home page
    When I do nothing
    Then I should see the title
 

Ниже приведен файл определения моих шагов —

 import { AppPage } from '../pages/app.po';
import { Before, Given, When, Then } from 'cucumber';
import { expect } from 'chai';

let page: AppPage;

Before(() => {
  page = new AppPage();
});

Given(/^I am on the home page$/, async () => {
  await page.navigateTo();
});

When(/^I do nothing$/, () => {});

Then(/^I should see the title$/, async () => {
  expect(await page.getTitleText()).to.equal('Welcome to angular-cli-cucumber-demo!');
});
 

Ниже приведен файл объектов моей страницы —

 import { browser, by, element } from 'protractor';

export class AppPage {
  navigateTo() {
    return browser.get('/');
  }

  getTitleText() {
    return element(by.css('app-root h1')).getText();
  }
}
 

Я получаю сообщение об ошибке ниже, когда пытаюсь запустить тесты с помощью команды ng e2e

 DevTools listening on ws://127.0.0.1:56273/devtools/browser/7653bd59-c490-4ac0-a00e-0d3132dc5b11
[0417/123615.432:ERROR:broker_win.cc(137)] Error sending sync broker message: Error (0x5) while retrieving error. (0xE8)
[0417/123615.433:ERROR:command_buffer_proxy_impl.cc(92)] ContextResult::kFatalFailure: AllocateAndMapSharedMemory failed
[12:36:17] E/launcher - Error: C:UsersA527629Documentsworkspace-vs-codepoc-serenitye2esrcstepsapp.steps.ts:1
(function (exports, require, module, __filename, __dirname) { import { AppPage } from '../pages/app.po';
                                                                     ^

SyntaxError: Unexpected token {
    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 Object.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)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at supportCodePaths.forEach.codePath (C:UsersA527629Documentsworkspace-vs-codepoc-serenitynode_modulescucumberlibcliindex.js:142:42)
    at Array.forEach (<anonymous>)
    at Cli.getSupportCodeLibrary (C:UsersA527629Documentsworkspace-vs-codepoc-serenitynode_modulescucumberlibcliindex.js:142:22)
    at C:UsersA527629Documentsworkspace-vs-codepoc-serenitynode_modulescucumberlibcliindex.js:169:41
    at Generator.next (<anonymous>)
    at asyncGeneratorStep (C:UsersA527629Documentsworkspace-vs-codepoc-serenitynode_modulescucumberlibcliindex.js:44:103)
[12:36:17] E/launcher - Process exited with error code 100
An unexpected error occurred: undefined
 

Ответ №1:

Добавьте следующий раздел в свой protractor.conf.js

 onPrepare() {
  require('ts-node').register({
    project: require('path').join(__dirname, './tsconfig.json')
  });
}
 

Комментарии:

1. это фактическое решение по сравнению со всеми вышеупомянутыми комментариями.

Ответ №2:

Попробуйте удалить

определение шагов

 import { Before, Given, When, Then } from 'cucumber';
import { expect } from 'chai';
 

и
объекты страницы

 import { browser, by, element } from 'protractor';
 

Этот импорт должен быть завершен protractor автоматически при его инициализации.

Комментарии:

1. Cannot find name 'AppPage', Cannot find name 'Given'. и то же самое для других.

2. Вам все равно понадобится импорт appPage, поскольку вы сами создали эту страницу, не уверены в проблеме Given . Не могли бы вы сначала попробовать изменить синтаксис require let AppPage = require('../pages/app.po'); , а затем посмотреть, как он ведет себя

3. const AppPage = require('../pages/app.po'); const Before = require('cucumber'); это устраняет ошибку, и мне еще предстоит ее протестировать, но есть идеи, почему другой не работает?

4. Я так понимаю, вы используете javascript, а не typescript?

5. Да, я справился с ошибкой cucumberOpts: { compiler: 'ts:ts-node/register' // interpret step definitions as TypeScript }, .