David Kethel
David Kethel

Reputation: 2560

How do I run my mocha.js tests in visual studio online build process

I have a react web application, that uses webpack.

Due to the issue with Left-pad I am including my node_modules folder in source control.

I have mocha and enzyme set up to unit test my react modules and my packages.json has the following test configuration.

 "test": "mocha-webpack --webpack-config webpack.config-test.js \"source/**/*.test.js\""

It all works great. when I run

npm run test

on my local development machine. All my test's get executed.

The problem I have is when I run "npm run test" as part of a build process on a dedicated build machine I get the following error

Error: Cannot find module 'enzyme'

After some digging around, I discovered that if I ran

npm install enzyme

on the build machine before I ran the test, then it worked fine. The reason this worked is that the install modified my node_modules/enzyme/packages.json file. There are 2 full paths stored in this file that had the paths to my local dev environment in them, and they got changed to the full path to where my project was run on the build machine.

One under _Args and one under _where

   {
  "_args": [
    [
      {
        "raw": "enzyme@^2.6.0",
        "scope": null,
        "escapedName": "enzyme",
        "name": "enzyme",
        "rawSpec": "^2.6.0",
        "spec": ">=2.6.0 <3.0.0",
        "type": "range"
      },
      "C:\\Dev\\UnifiedWeb"
    ]
  ],
  "_from": "enzyme@>=2.6.0 <3.0.0",
  "_id": "[email protected]",
  "_inCache": true,
  "_location": "/enzyme",
  "_nodeVersion": "7.0.0",
  "_npmOperationalInternal": {
    "host": "packages-12-west.internal.npmjs.com",
    "tmp": "tmp/enzyme-2.6.0.tgz_1478746866117_0.454174768878147"
  },
  "_npmUser": {
    "name": "ljharb",
    "email": "[email protected]"
  },
  "_npmVersion": "3.10.8",
  "_phantomChildren": {},
  "_requested": {
    "raw": "enzyme@^2.6.0",
    "scope": null,
    "escapedName": "enzyme",
    "name": "enzyme",
    "rawSpec": "^2.6.0",
    "spec": ">=2.6.0 <3.0.0",
    "type": "range"
  },
  "_requiredBy": [
    "#DEV:/",
    "#USER"
  ],
  "_resolved": "https://registry.npmjs.org/enzyme/-/enzyme-2.6.0.tgz",
  "_shasum": "148d742b25e2565f7e80870a0c92aea9be1b90ea",
  "_shrinkwrap": null,
  "_spec": "enzyme@^2.6.0",
  "_where": "C:\\Dev\\UnifiedWeb",
  "author": {
    "name": "Leland Richardson",
    "email": "[email protected]"
  },
  "bugs": {
    "url": "https://github.com/airbnb/enzyme/issues"
  },
  "dependencies": {
    "cheerio": "^0.22.0",
    "function.prototype.name": "^1.0.0",
    "in-publish": "^2.0.0",
    "is-subset": "^0.1.1",
    "lodash": "^4.16.4",
    "object-is": "^1.0.1",
    "object.assign": "^4.0.4",
    "object.entries": "^1.0.3",
    "object.values": "^1.0.3",
    "uuid": "^2.0.3"
  },
  "description": "JavaScript Testing utilities for React",
  "devDependencies": {
    "babel-cli": "^6.18.0",
    "babel-core": "^6.18.2",
    "babel-eslint": "^7.1.0",
    "babel-loader": "^6.2.7",
    "babel-preset-airbnb": "^2.1.1",
    "babel-register": "^6.18.0",
    "chai": "^3.5.0",
    "coveralls": "^2.11.14",
    "enzyme-example-jest": "^0.1.0",
    "enzyme-example-karma": "^0.1.1",
    "enzyme-example-karma-webpack": "^0.1.4",
    "enzyme-example-mocha": "^0.1.0",
    "enzyme-example-react-native": "^0.1.0",
    "eslint": "^3.9.1",
    "eslint-config-airbnb": "^13.0.0",
    "eslint-plugin-import": "^2.2.0",
    "eslint-plugin-jsx-a11y": "^2.2.3",
    "eslint-plugin-react": "^6.6.0",
    "gitbook-cli": "^1.0.1",
    "istanbul": "^1.0.0-alpha.2",
    "jsdom": "^6.1.0",
    "json-loader": "^0.5.4",
    "karma": "^1.3.0",
    "karma-chrome-launcher": "^1.0.1",
    "karma-firefox-launcher": "^1.0.0",
    "karma-mocha": "^1.2.0",
    "karma-sourcemap-loader": "^0.3.7",
    "karma-webpack": "^1.8.0",
    "mocha": "^3.1.2",
    "rimraf": "^2.5.4",
    "safe-publish-latest": "^1.1.1",
    "sinon": "^1.17.6",
    "webpack": "^1.13.3"
  },
  "directories": {},
  "dist": {
    "shasum": "148d742b25e2565f7e80870a0c92aea9be1b90ea",
    "tarball": "https://registry.npmjs.org/enzyme/-/enzyme-2.6.0.tgz"
  },
  "gitHead": "5c37d91715a88d393f3c260447a189a446d76e0c",
  "homepage": "https://github.com/airbnb/enzyme#readme",
  "keywords": [
    "javascript",
    "shallow rendering",
    "shallowRender",
    "test",
    "reactjs",
    "react",
    "flux",
    "testing",
    "test utils",
    "assertion helpers",
    "tdd",
    "mocha"
  ],
  "license": "MIT",
  "main": "build",
  "maintainers": [
    {
      "name": "airbnb",
      "email": "[email protected]"
    },
    {
      "name": "intelligibabble",
      "email": "[email protected]"
    },
    {
      "name": "ljharb",
      "email": "[email protected]"
    }
  ],
  "name": "enzyme",
  "optionalDependencies": {},
  "peerDependencies": {
    "react": "0.13.x || 0.14.x || ^15.0.0-0 || 15.x"
  },
  "readme": "ERROR: No README data found!",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/airbnb/enzyme.git"
  },
  "scripts": {
    "build": "babel src --out-dir build",
    "check": "npm run lint && npm run test:all",
    "clean": "rimraf build",
    "docs:build": "npm run docs:prepare && gitbook build",
    "docs:clean": "rimraf _book",
    "docs:prepare": "gitbook install",
    "docs:publish": "npm run docs:clean && npm run docs:build && cd _book && git init && git commit --allow-empty -m 'update book' && git fetch [email protected]:airbnb/enzyme.git gh-pages && git checkout -b gh-pages && git add . && git commit -am 'update book' && git push [email protected]:airbnb/enzyme.git gh-pages --force",
    "docs:watch": "npm run docs:prepare && gitbook serve",
    "lint": "eslint --ext js,jsx src test",
    "postversion": "git push && git push --tags && npm run clean && npm run docs:publish",
    "prepublish": "not-in-publish || (npm run clean && npm run build && safe-publish-latest)",
    "pretest": "npm run lint",
    "preversion": "npm run clean && npm run check",
    "react:13": "npm run react:clean && npm i [email protected]",
    "react:14": "npm run react:clean && npm i [email protected] [email protected] [email protected]",
    "react:15": "npm run react:clean && npm i react@15 react-dom@15 react-addons-test-utils@15",
    "react:clean": "rimraf node_modules/react node_modules/react-dom node_modules/react-addons-test-utils",
    "test": "npm run clean && npm run build && npm run test:only",
    "test:all": "npm run react:13 && npm run test:only && npm run react:14 && npm run test:only && npm run react:15 && npm run test:only",
    "test:env": "sh ./example-test.sh",
    "test:karma": "karma start",
    "test:only": "mocha --recursive test",
    "test:single": "mocha --watch",
    "test:watch": "mocha --recursive --watch test",
    "travis": "babel-node ./node_modules/.bin/istanbul cover --report html _mocha -- test --recursive",
    "version": "npm run build"
  },
  "version": "2.6.0"
}

This problem will also affect other developers in my team, as the paths will need to be changed to their local development if they want to run the tests locally.

Why is the full path in the enzyme package? Is there a better way of handling this? Am I missing something, or is npm not portable?

Upvotes: 2

Views: 623

Answers (1)

Scott
Scott

Reputation: 2028

Have you tried npm link ext/* --prefix=node_modules

As per this thread - Local dependency in package.json

Upvotes: 1

Related Questions