Проблемы с подключением Karma-Webpack с NpmPrettyMuch - PullRequest
2 голосов
/ 19 марта 2020

Проблема

Я пытаюсь запустить тест на огурец с помощью тестера Karma в моем проекте Npm с использованием адаптера karma-cucumber- js. Однако при запуске теста в консоли я нахожу следующую ошибку:

START:
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  ReferenceError: Can't find variable: __adapter__
  at features/Test.steps.js:80

Для большего контекста я нахожусь в процессе миграции платформы. Ранее у нас была сложная система, которая по существу использовала карму 1.7.x, огурец 1.2.x, карма-огурец- js 0.3.3 и Узел 0.8.x. Я пытаюсь настроить простой проект npm с теми же точными версиями (за исключением того, что сейчас я использую Node 8.x, так как мне не разрешено использовать 0.8.x). У нас есть набор из тысячи старых тестов, для которых мы хотели бы свести к минимуму модификации, и было бы проще всего запустить плагин karma-cucumber- js, поскольку наша система тестирования тесно связана с кармой и огурцом. ,

Вещи, которые я пробовал

Я немного поигрался с зависимым исходным кодом karma-cucumber- js, подправив код в каталоге node_modules моего пакета, чтобы попытаться лучше понять вопрос под рукой. Мне удалось обойти вышеуказанную проблему, изменив эти строки в адаптере. js, чтобы глобализировать переменную адаптера в окне следующим образом:

var __adapter__;
(function (win) {
    var adapter = new karma.CucumberAdapter(__karma__);
    __adapter__ = adapter;
    __karma__.start = adapter.getStart();
    win.__adapter__ = __adapter__;
})(window);

, что привело к следующей ошибке :

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  ReferenceError: Can't find variable: Cucumber
  at node_modules/karma-cucumber-js/src/adapter.js:242

Который я обошел, добавив следующую строку кода в начало этого самого файла после слова «использовать строгий»:

var Cucumber = require('../../cucumber/release/cucumber.js');

, что привело к этой проблеме:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  ReferenceError: Can't find variable: CucumberHTML
  at node_modules/karma-cucumber-js/src/adapter.js:177

И обходной путь должен был вручную потребовать этот файловый адаптер. js:

var CucumberHTML = require('../../cucumber-html/src/main/resources/cucumber/formatter/formatter.js');

С этим "взломом" тесты на огурец теперь могут запускаться успешно:

START:
PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: 'Found features: /base/features/Test.feature'
PhantomJS 2.1.1 (Mac OS X 0.0.0) LOG: 'Tags: '
  Is it Friday yet?
    Friday is Friday
      ✔ Given today is Friday
      ✔ When I ask whether it's Friday yet
      ✔ Then I should be told "TGIF"

Finished in 0.002 secs / 0.002 secs @ 19:36:12 GMT-0700 (PDT)

SUMMARY:
✔ 3 tests completed

Основная проблема заключается в том, что [эти переменные Typescript] [4], объявленные в конце пакетов karma-cucumber- js, по какой-то причине недоступны для использования , Я полагаю, это связано с проблемой проводки в веб-пакете.

Некоторые другие вещи, которые я пробовал:

  • Использование других адаптеров карма-огурца (есть еще 2), не повезло.
  • Игра с комбинациями версий карма / фантоми / огурец
  • Использование Firefox и Chrome вместо Фантома JS

Мои вопросы

  1. Мне нужна помощь, чтобы понять, почему эта настройка веб-пакета не работает. Как я могу это исправить?
  2. Есть ли какие-либо шаги, которые я пропускаю, или альтернативные подходы, которые я должен предпринять, чтобы отладить и решить проблему?

Я включил часть кода проекта ниже, Спасибо за ваше время!

Код проекта

пакет. json:

{
  "name": "npm-pretty-much-local-example",
  "version": "1.0.0",
  "scripts": {
    "wp": "webpack",
    "wpd": "webpack --debug",
    "test": "./node_modules/karma/bin/karma start"
  },
  "devDependencies": {
    "@babel/core": "^7.7.2",
    "@babel/preset-env": "^7.7.1",
    "@babel/preset-react": "^7.7.0",
    "babel-loader": "^8.0.0",
    "@babel/preset-typescript": "^7.7.x",
    "babel-generator": "^6.26.1",
    "babel-core": "^6.26.3",
    "cucumber": "^1.2.x",
    "jquery": "^3.4.1",
    "karma": "^1.7.x",
    "karma-cucumber-js": "^0.3.3",
    "karma-mocha-reporter": "^2.0.5",
    "karma-phantomjs-launcher": "^1.0.x",
    "karma-webpack": "^1.7.x",
    "socket.io": "^1.4.x",
    "webpack": "^3.7.1",
    "setimmediate": "^1.0.5",
    "karma-typescript-preprocessor": "^0.4.0"
  },
  "dependencies": {}
}

webpack.config. js:

const path = require('path');

module.exports = {
  context: path.resolve('.'),
  entry: './src/index.js',
  output: {
    filename: "./dist/output.js"
  },
  resolve: {
    extensions: ['.js'],
    modules: [
      path.resolve('./src'),
      path.resolve('./node_modules')
    ]
  }
};

Test.feature:

@Test
Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Friday is Friday
    Given today is Friday
    When I ask whether it's Friday yet
    Then I should be told "TGIF"

Test.steps. js:

function isItFriday(today) {
    if (today === "Friday") {
        return "TGIF";
    } else {
        return "Nope";
    }
}

// TODO: why is this not defined, and how was __adapter__ defined in the first place?
__adapter__.addStepDefinitions(function (scenario) {
    scenario.Given('today is {string}', function (givenDay) {
        this.today = givenDay;
    });

    scenario.When('I ask whether it\'s Friday yet', function () {
        this.actualAnswer = isItFriday(this.today);
    });

    scenario.Then('I should be told {string}', function (expectedAnswer) {
        return this.actualAnswer === expectedAnswer;
    });
});

срк / индекс. js

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