Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a better way to structure my NPM scripts so they are more readable?

I've started to rely on NPM scripts as my main tool for my testing process.

As I've written more NPM scripts the order and structure are increasingly hard to read at a glance.

Here is what my current scripts looks like:

{
  "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"
}

This is only for around 8 tests or so. I plan on writing scripts to output reports to junit formats and it's already starting to look like an eye strain.

How can I structure my npm scripts to be more readable?

like image 797
azemPC Avatar asked Oct 19 '22 20:10

azemPC


2 Answers

edit: selecting this as the best answer for now until another solution is posted.

As a cheap trick I made empty test scripts to act as a header then simply indent the proper scripts under it. Not a fully sufficient method but it is better than no indention at all.

Warning: Running the empty scripts will cause errors.

{
    "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"
}
like image 193
azemPC Avatar answered Oct 22 '22 01:10

azemPC


To clean up your file paths for mocha tests, you might consider moving them to opts files.

So "alda:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/*.js", could become "alda:mocha": "mocha --opts mocha_opts/alda where theopts file named alda contains:

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

Of course, mocha_opts and opts filenames would be whatever you want.

Also, -R is shorthand for --reporter, if that helps

opts files can be overridden by command line arguments so you could get some reuse out of them.

I use Babel a bunch and have my db, client and api server in the same project for now. Things got a little out of hand. Along with some shell/node scripts opts helped me out.

"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"
}
like image 24
thebearingedge Avatar answered Oct 22 '22 01:10

thebearingedge