Как вы тестируете один файл (из командной строки) с проектом Vue Webpack? - PullRequest
0 голосов
/ 18 октября 2018

I вижу , что вы можете запустить karma start, а затем karma run -- --grep=testDescriptionFilter, чтобы запустить тест только для одного файла.Однако, когда я пытаюсь сделать это в проекте, где я использую Vue и начал работать с шаблоном веб-пакета , это не работает.

Я попытался отредактировать массив files в karma.conf.js в надежде на возможность протестировать один файл таким способом.Обычно массив выглядит так:

files: [
  '../../node_modules/jquery/dist/jquery.min.js',
  '../../node_modules/babel-polyfill/dist/polyfill.js',
  './index.js'
],

И index.js выглядит так:

import Vue from 'vue'

Vue.config.productionTip = false

// require all test files (files that ends with .spec.js)
const testsContext = require.context('./specs', true, /\.spec$/)
testsContext.keys().forEach(testsContext)

// require all src files except main.js for coverage.
// you can also change this to match only the subset of files that
// you want coverage for.
const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
srcContext.keys().forEach(srcContext)

Сначала я попытался включить файл, который я хочу проверить, вместо ./index.js, напримеритак:

files: [
  '../../node_modules/jquery/dist/jquery.min.js',
  '../../node_modules/babel-polyfill/dist/polyfill.js',
  './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js'
],

Когда я это делаю, я получаю ошибку SyntaxError: Use of reserved word 'import':

code/premium-poker-tools [master●] » npm run unit

> premium-poker-tools@1.0.0 unit /Users/adamzerner/code/premium-poker-tools
> BABEL_ENV=test karma start test/unit/karma.conf.js

18 10 2018 12:25:49.014:WARN [karma]: No captured browser, open http://localhost:9876/
18 10 2018 12:25:49.021:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
18 10 2018 12:25:49.022:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
18 10 2018 12:25:49.026:INFO [launcher]: Starting browser PhantomJS
18 10 2018 12:25:49.801:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket 1jJ_7wJ0bOiMO299AAAA with id 58854798
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Use of reserved word 'import'
  at specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js:1

PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
TOTAL: 0 SUCCESS

Я не уверен, почему я получаю эту ошибку, но после просмотраэтот файл ./index.js, похоже, что это необходимо, и что если я хочу указать, что я хочу запустить спецификации только для определенного файла, мне придется сделать это там.Поэтому я попытался создать файл set-ranges-according-to-filters.js, который включает в себя только файл, который я хочу проверить, и в остальном он такой же, как index.js:

import Vue from 'vue'

Vue.config.productionTip = false

// require all test files (files that ends with .spec.js)
const testsContext = require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js', true, /\.spec$/)
testsContext.keys().forEach(testsContext)

// require all src files except main.js for coverage.
// you can also change this to match only the subset of files that
// you want coverage for.
const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
srcContext.keys().forEach(srcContext)

Затем я обновил массив files в karma.conf.js:

files: [
  '../../node_modules/jquery/dist/jquery.min.js',
  '../../node_modules/babel-polyfill/dist/polyfill.js',
  './set-ranges-according-to-filters.js'
],

и управлял кармой.Я снова получаю ту же ошибку:

code/premium-poker-tools [master●] » npm run unit

> premium-poker-tools@1.0.0 unit /Users/adamzerner/code/premium-poker-tools
> BABEL_ENV=test karma start test/unit/karma.conf.js

18 10 2018 12:30:35.072:WARN [karma]: No captured browser, open http://localhost:9876/
18 10 2018 12:30:35.087:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
18 10 2018 12:30:35.087:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
18 10 2018 12:30:35.119:INFO [launcher]: Starting browser PhantomJS
18 10 2018 12:30:35.937:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket 5-U0Mca0_Vgr07-rAAAA with id 87593561
PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Use of reserved word 'import'
  at set-ranges-according-to-filters.js:1

PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 0 of 0 SUCCESS (0 secs / 0 secs)
TOTAL: 0 SUCCESS

Предпочтительно, я хотел бы иметь возможность проверить один файл из командной строки, что-то вроде karma start --file-path-to-my-file.Но если это невозможно, утешением будет возможность отредактировать karma.conf.js так, чтобы он только запускал тесты для моего файла.

1 Ответ

0 голосов
/ 19 октября 2018

Путем редактирования test/unit/index.js

Один из способов - редактирование test/unit/index.js.Следующий код для test/unit/index.js проверяет файл, который я хотел проверить:

import Vue from 'vue'

Vue.config.productionTip = false

// require all test files (files that ends with .spec.js)
const testsContext = require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1', true, /afterFlop1\.spec\.js/)
testsContext.keys().forEach(testsContext)

// require all src files except main.js for coverage.
// you can also change this to match only the subset of files that
// you want coverage for.
const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/)
srcContext.keys().forEach(srcContext)

Обратите внимание, что моя первоначальная попытка использования require.context - require.context('./specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js', true, /\.spec$/) - не сработала,Первый аргумент - это папка , а не файл.Второй аргумент - это флаг, указывающий, следует ли искать и в подкаталогах, а третий - регулярное выражение для сопоставления файлов.


Сначала я попытался создать другой файл вместо test/unit/index.js и включитьэто в files вместо ./index.js.Причина, по которой я получил ошибку SyntaxError: Use of reserved word 'import', заключается в том, что import - это функция ES6, которая не является частью Node.Для этого нужен веб-пакет.Чтобы заставить его работать, мне пришлось добавить его в массив preprocessors в karma.conf.js примерно так:

files: [
  '../../node_modules/jquery/dist/jquery.min.js',
  '../../node_modules/babel-polyfill/dist/polyfill.js',
  // './index.js'
  './set-ranges-according-to-filters.js'
],
preprocessors: {
  './index.js': ['webpack', 'sourcemap'],
  './set-ranges-according-to-filters.js': ['webpack', 'sourcemap']
},

Путем непосредственного включения файла в массив files

Непосредственновключение файла в массив files вместо ./index.js также работает:

files: [
  '../../node_modules/jquery/dist/jquery.min.js',
  '../../node_modules/babel-polyfill/dist/polyfill.js',
  // './index.js'
  '../../src/services/monkey-patches.js',
  './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js'
],

Есть два предостережения (о которых я мог подумать):

1) Использование ./index.js включает в себя другие спецификации и файлы SRC.Когда вы просто добавляете свой файл напрямую вместо использования ./index.js, эти другие файлы не загружаются, и это может привести к поломке.Это помогло мне, и мне пришлось добавить что-то в массив files перед моей спецификацией, чтобы заставить его работать.

2) Мне нужно было добавить следующее в массив preprocessors:

preprocessors: {
  // './index.js': ['webpack', 'sourcemap'],
  '../../src/services/monkey-patches.js': ['webpack', 'sourcemap'],
  './specs/players/OutcomeAnalyzerPlayer/setRangesAccordingToFilters/afterPreflop1/afterFlop1.spec.js': ['webpack', 'sourcemap']
},

Используя командную строку

Я не смог заставить работать karma run -- --grep=testDescriptionFilter .И когда я запускаю karma run --help и karma start --help, я не вижу никаких опций для запуска тестов определенного файла.

Если вы действительно хотите, вы можете создать различные файлы конфигурации кармы, которые запускают тестыдля разных файлов, а затем создайте сценарии в package.json для запуска ваших тестов с разными файлами конфигурации.Например.karma-1.conf.js будет запускать тесты для file-1.spec.js, и тогда у вас может быть команда npm run unit-1, которая запускает karma start test/unit/karma-1.conf.js:

{
  "scripts": {
    "unit-1": "karma start test/unit/karma-1.conf.js"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...