2015-12-09 2 views
5

Я начал полагаться на сценарии NPM в качестве основного инструмента для моего процесса тестирования.Есть ли лучший способ структурировать мои сценарии NPM, чтобы они были более читабельными?

Поскольку я написал больше сценариев NPM, порядок и структура все труднее читать с первого взгляда.

Вот что мои текущие сценарии выглядит следующим образом:

{ 
    "scripts": { 
    "clean": "rm -rf report/*", 
    "report": "rm -rf report/; mkdir report", 
    "tests:mocha": "mocha test/spec/", 
    "all-tests:mocha": "npm run tests:mocha -- --recursive", 
    "all-tests:json": "npm run all-tests:mocha -- --reporter json", 
    "all-tests:jsonReport": "npm run all-tests:json > report/all-tests.json", 
    "all-admin:mocha": "mocha test/spec/admin.production.io/", 
    "all-admin-all:mocha": "npm run all-admin:mocha -- --recursive", 
    "all-admin:json": "npm run all-admin:mocha -- --reporter json", 
    "all-admin:jsonReport": "npm run all-admin:json > report/all-tests.json", 
    "google:mocha": "mocha test/spec/googleTest.js", 
    "google:spec": "npm run google:mocha -- --reporter spec --slow 0", 
    "google:json": "npm run google:mocha -- --reporter json", 
    "google:jsonReport": "npm run google:json > report/google-test.json", 
    "usersAll:mocha": "mocha test/spec/admin.production.io/dashboard/users/*.js", 
    "usersAll:spec": "npm run usersAll:mocha -- --reporter spec --slow 0", 
    "usersAll:json": "npm run usersAll:mocha -- --reporter json", 
    "usersAll:jsonReport": "npm run usersAll:jsonReport > report/admin-users-dashboard-all.json", 
    "orgsAll:mocha": "mocha test/spec/admin.production.io/dashboard/organizations/*.js", 
    "orgsAll:spec": "npm run orgsAll:mocha -- --reporter spec --slow 0", 
    "orgsAll:json": "npm run orgsAll:mocha -- --reporter json", 
    "orgsAll:jsonReport": "npm run orgsAll:json > report/admin-orgs-dashboard-all.json", 
    "users-orgs:mocha": "npm run users:spec; npm run orgs:spec", 
    "users-orgs-report": "npm run users:jsonReport; npm run orgs:jsonReport", 
    "pos-users:mocha": "mocha test/spec/admin.production.io/dashboard/users/positiveUserTest.js", 
    "pos-users:spec": "npm run pos-users:mocha -- --reporter spec --slow 0", 
    "pos-users:json": "npm run pos-users:mocha -- --reporter json", 
    "pos-users:jsonReport": "npm run pos-users:json > report/admin-users-dashboard-positive.json", 
    "pos-orgs:mocha": "mocha test/spec/admin.production.io/dashboard/organizations/positiveOrgsTests.js", 
    "pos-orgs:spec": "npm run pos-orgs:mocha -- --reporter spec --slow 0", 
    "pos-orgs:json": "npm run pos-orgs:mocha -- --reporter json", 
    "pos-orgs:jsonReport": "npm run pos-orgs:json > report/admin-users-dashboard-positive.json", 
    "alice-la:mocha": "mocha test/spec/admin.local.us/dashboard/alice/*.js", 
    "alice-la:jsonReport": "npm run alice-la:mocha -- --reporter json -- > report/local-admin-dashboard-alice-all-tests.json", 
    "a2361p-l:mocha": "mocha test/spec/admin.local.us/dashboard/alice/2361-p.js", 
    "a2361p-l:spec": "npm run a2361p-l:mocha -- --reporter spec --slow 0", 
    "a2361p-l:json": "npm run a2361p-l:mocha -- --reporter json", 
    "a2361p-l:jsonReport": "npm run a2361p-l:json > report/a2361p-l.json", 
    "a2361pf-l:mocha": "mocha test/spec/admin.local.us/dashboard/alice/2361-pf.js", 
    "a2361pf-l:spec": "npm run a2361pf-l:mocha -- --reporter spec --slow 0", 
    "a2361pf-l:json": "npm run a2361pf-l:mocha -- --reporter json", 
    "a2361pf-l:jsonReport": "npm run a2361pf-l:json > report/a2361pf-l.json", 
    "alice-pa:mocha": "mocha test/spec/admin.production.io/dashboard/alice/*.js", 
    "alice-pa:jsonReport": "npm run alice-pa:mocha -- --reporter json -- > report/production-admin-dashboard-alice-all-tests.json", 
    "a2361p-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-p.js", 
    "a2361p-p:spec": "npm run a2361p-p:mocha -- --reporter spec --slow 0", 
    "a2361p-p:json": "npm run a2361p-p:mocha -- --reporter json", 
    "a2361p-p:jsonReport": "npm run a2361p-p:json > report/a2361p-p.json", 
    "a2361pf-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-pf.js", 
    "a2361pf-p:spec": "npm run a2361pf-p:mocha -- --reporter spec --slow 0", 
    "a2361pf-p:json": "npm run a2361pf-p:mocha -- --reporter json", 
    "a2361pf-p:jsonReport": "npm run a2361pf-p:json > report/a2361pf-p.json", 
    "a2361:all": "npm run clean; npm run a2361p-l:mocha; npm run a2361p-l:spec; npm run a2361p-l:json; npm run a2361p-l:jsonReport; npm run a2361pf-l:mocha; npm run a2361pf-l:spec; npm run a2361pf-l:json; npm run a2361pf-l:jsonReport; npm run a2361p-p:mocha; npm run a2361p-p:spec; npm run a2361p-p:json; npm run a2361p-p:jsonReport; npm run a2361pf-p:mocha; npm run a2361pf-p:spec; npm run a2361pf-p:json; npm run a2361pf-p:jsonReport", 
    "test": "mocha" 
} 

Это только около 8 тестов или около того. Я планирую писать сценарии для вывода отчетов в форматы junit, и это уже начинает выглядеть как напряжение глаз.

Как я могу структурировать свои сценарии npm, чтобы они были более читабельными?

+0

Может быть, вы могли бы создать несколько файлов .js, каждая из которых определяет небольшую часть испытаний. Затем один главный файл импортирует другие, а затем «скомпилируйте» ваш пакет.json с помощью JSON.Strignify (require ('./ main.js')) – Ludo

+0

@Ludo Хотя это сработает, это кажется чрезмерно чрезмерным. Я думаю, это зависит от объема проекта и от количества сценариев npm, которые ему понадобятся. Я рефакторинг некоторых моих скриптов, а также сокращение некоторых ненужных строк. Я также не думаю, что я достаточно квалифицирован, чтобы создать свой пакет. Json, используя JS, чтобы написать его правильно. – azemPC

+0

Возможно, вы можете использовать Konphyg (https://github.com/pgte/konphyg). Это создаст объект конфигурации довольно легко. Вместо этого вы используете fs.writeFileSync ("package.json", JSON.stringify (conphyg.all())) для создания файла package.json. Это (https://github.com/exhuma/braindump/tree/master/jsonformat) может отменить его. – Ludo

ответ

2

Редактировать: выбор этого как лучшего ответа пока пока не опубликовано другое решение.

Как дешевый трюк, я сделал пустые тестовые скрипты, чтобы выступать в качестве заголовка, а просто отступы под его подлинными сценариями. Не вполне достаточный метод, но лучше, чем отсутствие отступлений.

Предупреждение: Запуск пустых сценариев приведет к ошибкам.

{ 
    "utils": "", 
     "clean": "rm -rf report/*; rm -rf *.xml", 
     "report": "rm -rf report/; mkdir report", 
    "all-tests": "", 
     "tests:mocha": "mocha test/spec/", 
     "at:mocha": "npm run tests:mocha -- --recursive", 
     "at:junit": "npm run at:mocha -- --reporter mocha-junit-reporter", 
     "at:jReport": "MOCHA_FILE=./report/all-tests.xml npm run at:junit", 
    "all-prod-admin-tests": "",   
     "prod-tests:mocha": "mocha test/spec/admin.production.io/", 
     "apa:mocha": "npm run -prod-tests:mocha -- --recursive", 
     "apa:junit": "npm run apa:mocha -- --reporter mocha-junit-reporter", 
     "apa:jReport": "MOCHA_FILE=./report/all-prod-admin-tests.xml npm run apa:junit", 
    "all-local-admin-tests": "",   
     "local-tests:mocha": "mocha test/spec/admin.pclocal.us/", 
     "ala:mocha": "npm run -prod-tests:mocha -- --recursive", 
     "ala:junit": "npm run ala:mocha -- --reporter mocha-junit-reporter", 
     "ala:jReport": "MOCHA_FILE=./report/all-local-admin-tests.xml npm run ala:junit", 
    "google-example": "", 
     "google:mocha": "mocha test/spec/googleTest.js", 
     "google:spec": "npm run google:mocha -- --reporter spec --slow 0", 
     "google:junit": "npm run google:mocha -- --reporter mocha-junit-reporter", 
     "google:jReport": "MOCHA_FILE=./report/google.xml npm run google:junit", 
    "alice-local-admin-dashboard-tests": "", 
     "alda:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/*.js", 
     "alda:junit": "npm run alda:mocha -- --reporter mocha-junit-reporter", 
     "alda:jReport": "MOCHA_FILE=./report/alice-local-admin-dashboard-tests-all.xml npm run alda:junit", 
     "2361-automated-test": "", 
      "local-admin-pass": "", 
       "a2361p-l:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/2361-p.js", 
       "a2361p-l:spec": "npm run a2361p-l:mocha -- --reporter spec --slow 0", 
       "a2361p-l:junit": "npm run a2361p-l:mocha -- --reporter mocha-junit-reporter", 
       "a2361p-l:jReport": "MOCHA_FILE=./report/2361-local-pass.xml npm run a2361p-l:junit", 
      "local-admin-pass-fail": "", 
       "a2361pf-l:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/2361-pf.js", 
       "a2361pf-l:spec": "npm run a2361pf-l:mocha -- --reporter spec --slow 0", 
       "a2361pf-l:junit": "npm run a2361pf-l:mocha -- --reporter mocha-junit-reporter", 
       "a2361pf-l:jReport": "MOCHA_FILE=./report/2361-local-pass-fail.xml npm run a2361pf-l:junit", 
    "alice-production-admin-dashboard-tests": "", 
     "apda:mocha": "mocha test/spec/admin.production.io/dashboard/alice/*.js", 
     "apda:junit": "npm run apda:mocha -- --reporter mocha-junit-reporter", 
     "apda:jReport": "MOCHA_FILE=./report/alice-production-admin-dashboard-tests-all.xml npm run apda:junit", 
     "2361-automated-test": "", 
      "prod-admin-pass": "", 
       "a2361p-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-p.js", 
       "a2361p-p:spec": "npm run a2361p-p:mocha -- --reporter spec --slow 0", 
       "a2361p-p:junit": "npm run a2361p-p:mocha -- --reporter mocha-junit-reporter", 
       "a2361p-p:jReport": "MOCHA_FILE=./report/2361-prod-pass.xml npm run a2361p-p:junit", 
      "prod-admin-pass-fail": "", 
       "a2361pf-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-pf.js", 
       "a2361pf-p:spec": "npm run a2361pf-p:mocha -- --reporter spec --slow 0", 
       "a2361pf-p:junit": "npm run a2361pf-p:mocha -- --reporter mocha-junit-reporter", 
       "a2361pf-p:jReport": "MOCHA_FILE=./report/2361-prod-pass-fail.xml npm run a2361pf-p:junit", 
    "test": "mocha" 
} 
1

Чтобы очистить ваши пути к файлам для мокко тестов, вы могли бы рассмотреть вопрос о переносе их opts файлов.

Так "alda:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/*.js", может стать "alda:mocha": "mocha --opts mocha_opts/alda где файл opts имени alda содержит:

test/spec/admin.pclocal.us/dashboard/alice/*.js 
--recursive 

Конечно, mocha_opts и opts имена файлов будет все, что вы хотите.

Кроме того, -R представляет собой сокращенную --reporter, если это помогает

opts файлы могут быть переопределены аргументы командной строки, так что вы могли бы получить повторное из них.

Я использую Babel в связке и теперь имею свой сервер db, client и api в том же проекте. Вещи получили немного из-под контроля. Наряду с некоторыми сценариями оболочки/узла opts помог мне.

"scripts": { 
    "test": "npm run client:test && npm run api:test", 
    "knex": "babel-node node_modules/.bin/knex --cwd db", 
    "api:test": "mocha --opts api/__dev__/mocha.unit", 
    "api:cover": "api/__dev__/api-cover.sh", 
    "api:tdd": "npm run -s db:cycle && npm run -s api:test -- -w -R min", 
    "api:start": "babel-node api/server", 
    "api:watch": "nodemon --exec npm run -s api:start", 
    "client:test": "mocha --opts client/__dev__/mocha.unit", 
    "client:tdd": "npm run -s client:test -- -w -R min", 
    "client:cover": "client/__dev__/client-cover.sh", 
    "client:build": "babel-node scripts/client-build.js", 
    "client:watch": "npm run -s client:build -- --watch", 
    "db:make": "npm run knex migrate:make", 
    "db:latest": "npm run -s knex migrate:latest", 
    "db:rollback": "npm run -s knex migrate:rollback", 
    "db:cycle": "npm run -s db:rollback && npm run -s db:latest" 
} 
+0

У меня возникла проблема с добавлением путей файла в файле mocha.opts и ссылкой на них в сценарии npm. Вот что я вложил в mocha.opts '--alda test/spec/admin.pclocal.us/dashboard/alice/*. Js', а сценарий npm изменен на' 'alda: mocha": "mocha - --opts - --alda ". Я получаю сообщение об ошибке, что alda - неизвестный вариант. Что означает 'mocha_opts/alda' в файле конфигурации mocha.opts? Мне разрешено работать с перечисленными опциями [здесь] (https://mochajs.org/#usage)? – azemPC

+0

Да, это единственные поддерживаемые варианты, о которых я знаю. 'mocha_opts /' - это примерный каталог, в котором вы можете хранить файлы 'opts'. 'alda' - это пример имени файла, который я дал. – thebearingedge

+0

Добавлен пример 'opts' для моего ответа – thebearingedge

0

Давайте признаем, что JSON-файлы не являются хорошим местом для хранения строить задачи (нет комментариев, нет переменных), а package.json уже особенно хаотичный.

gulp-shelter может быть хорошим способом рационализировать ваши скрипты сборки, если обучение bash и make не является вариантом для вас, вашей команды и внешних участников. Он позволяет хранить ваши задачи сборки в JS-файле и сочетает в себе все преимущества от сценариев NPM и gulpfiles: краткость и возможность повторного использования.

Вот как это позволило бы упростить свои задачи:

const gulp = require('gulp'); 
const shelter = require('gulp-shelter')(gulp); 

const testDir = 'test/spec/'; 

const clean = `rm -rf report/*`; 
const report = `${clean}; mkdir report`; 
const testsMocha = `mocha ${testDir}`; 
const allTestsMocha = `${testsMocha} --recursive`; 
const allTestsJson = `${allTestsMocha} --reporter json`; 
const allTestsJsonReport = `${allTestsJson} > report/all-tests`; 
... 

shelter({ 
    'clean': clean, 
    'report': report, 
    'all-tests:mocha': allTestsMocha, 
    'all-tests:json': allTestsJson, 
    'all-tests:jsonReport': allTestsJsonReport, 
    ... 
}); 
Смежные вопросы