Правильное использование огурца с машинописью? - PullRequest
0 голосов
/ 23 октября 2018

Я следовал учебнику , но настройка действительно плохая.В основном он использует машинописный текст для преобразования файлов .ts в .js.Таким образом, в основном весь ваш исходный код загрязняется файлами .js.

Поэтому, как только вы импортируете файл .ts из исходного кода, все зависимости дублируются с файлом .js.

Знаете ли вы, как правильно тестировать огурцы при машинописи?

Хакерское решение: Скопируйте все функции и все файлы в другую временную папку, запустите ее оттуда.Я ожидаю, что огурец будет немного более зрелым, чем этот, поэтому мой вопрос здесь?

Или измените конфигурацию огурца, чтобы посмотреть в папке сборки от ts.

Спасибо

Почему просто использование машинописи не будет работать:

Структура кода:

  • тесты
    • a.feature
    • stepDefinitions.ts

Теперь вы скомпилируете машинопись и получите следующую структуру:

  • tests
    • a.feature
    • stepDefinitions.ts
  • build
    • тесты
      • stepDefinitions.js

Теперь вы можете видеть, что stepDefinitions.js не знает, где найти a.feature.Если вы запустите cucumber в папке build / test, он не найдет какой-либо пошаговой функции для запуска ... потому что они находятся в папке test.Таким образом, хакерский способ исправить это - скопировать файлы объектов, получившие такую ​​структуру:

  • tests
    • a.feature
    • stepDefinitions.ts
  • сборка
    • тесты
      • a.feature
      • stepDefinitions.js

Теперь это сработает, но взломать, мне это не нравится.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018

Обновленный ответ на основе предоставленной дополнительной информации:

Первое, что вы должны сделать, это разделить ваши функции и шаги в их собственных папках

 tests
  features
    a.feature
    b.feature
  stepDefinitions
    aStep.ts

Далее,создайте файл cucumber.js, который будет профилем огурца.Я использую следующий профиль, но это зависит от вас, что вы хотите сделать

    var common = [
  `--format ${
    process.env.CI || !process.stdout.isTTY ? 'progress' : 'progress-bar'
    }`,
  '--format json:./reports/cucumber-json-reports/report.json',
  '--format rerun:@rerun.txt',
  '--format usage:usage.txt',
  '--parallel 20',
  '--require ./build/tests/stepDefinitions/**/*.js',
  '--require ./build/tests/stepDefinitions/*.js',
  '--require ./build/tests/support/*.js'
].join(' ');

module.exports = {
  default: common,
};

Вышесказанное говорит огурцу, где ваши шаги.Теперь вы можете запустить что-то вроде следующего из корня проекта

tsc && ./node_modules/.bin/cucumber-js ./tests/features/ -p default

Это будет

  1. Скомпилировать ваш код
  2. Запустить библиотеку cucumber-js
  3. Запустите cucumber-js для папки функций
  4. Запустите cucumber-js для папки функций с профилем по умолчанию, который вы создали в своем файле cucumber.js
0 голосов
/ 27 марта 2019

Вам не нужно компилировать код с помощью tsc, а затем запускать cucumber для скомпилированных файлов, как это было предложено Раймондом Келли.Вы можете просто запустить cucumber с помощью транспортера машинописного текста, используя --require-module ts-node/register.Полный пример любезно предоставлен hdorgeval в cucumber-ts-starter

0 голосов
/ 21 ноября 2018

Я не слежу за вашим вопросом?Cucumber не имеет ничего общего с компиляцией файлов .ts в файлы .js, то есть это делает машинопись.Если вы не хотите, чтобы файлы .ts и .js находились в одной папке, вы можете добавить в свой файл tsconfig.json следующее:

"outDir": "typeScript"

Это выведет файлы javascript в папку "typeScript"."в корне вашего проекта.Мне лично нравится хранить их вместе, так как их легче отлаживать.Невозможно уйти от создаваемых файлов .js, поскольку они используются при запуске javascript.

...