Carles Barrobés
Carles Barrobés

Reputation: 11683

How to write a Jest configuration file

I am trying to pass along a configuration file to Jest in order to run tests only from a given directory.

According to documentation, you can use config.testPathDirs: https://facebook.github.io/jest/docs/api.html#config-testpathdirs-array-string and you can call jest --config=<config-file>.

Unfortunately the documentation doesn't include any description of how the configuration file should look like.

I tried both these options in a jest-config.js file:

testPathDirs = ['coredata/src'];

and

config.testPathDirs(['coredata/src']);

and ran:

$ jest --config=jest-config.js

...but I get this type of error:

$ jest --config=jest-config.js
Using Jest CLI v0.4.0
Failed with unexpected error.

/Users/carles/dev/azazo/coredata/node_modules/jest-cli/src/jest.js:179
      throw error;
            ^
SyntaxError: Unexpected token c
    at Object.parse (native)
    at /Users/carles/dev/azazo/coredata/node_modules/jest-cli/src/lib/utils.js:291:23
    at _fulfilled (/Users/carles/dev/azazo/coredata/node_modules/jest-cli/node_modules/q/q.js:798:54)
    at self.promiseDispatch.done (/Users/carles/dev/azazo/coredata/node_modules/jest-cli/node_modules/q/q.js:827:30)
    at Promise.promise.promiseDispatch (/Users/carles/dev/azazo/coredata/node_modules/jest-cli/node_modules/q/q.js:760:13)
    at /Users/carles/dev/azazo/coredata/node_modules/jest-cli/node_modules/q/q.js:574:44
    at flush (/Users/carles/dev/azazo/coredata/node_modules/jest-cli/node_modules/q/q.js:108:17)
    at process._tickCallback (node.js:419:13)

Upvotes: 57

Views: 182832

Answers (6)

Ehsan Sarshar
Ehsan Sarshar

Reputation: 3211

// package.json

{
 ...
 scripts: {
   "test": "jest --config ./jest.config.js"
 }
 ...
}

Upvotes: 5

Dan Zuzevich
Dan Zuzevich

Reputation: 3831

As of the current date of October 5, 2018, I was able to setup a jest configuration file with ease, without it requiring it to be in JSON format.

My package.json scripts section:

"scripts": {
    "start": "node server.js",
    "dev": "webpack-dev-server --hot --inline",
    "test": "jest --config ./jest-config.js",
    "build": "webpack",
    "postinstall": "webpack"
  }

I decided to keep the jest-config file in the root path alongside package.json, so that's where it is pointing to, but you can put it anywhere you want. Here is the configuration file, albeit a little short:

module.exports = {
  verbose: true,
  setupTestFrameworkScriptFile: "./enzyme.js",
  roots: [
    "../__tests__"
  ],
  modulePaths: [
    "./__stubs__"
  ],
  moduleNameMapper: {
    ".scss$": "scss-stub.js"
  }
}

The Jest documentation in the "Configuring Jest" section (link here) says that you can create it with a module.exports object. They include a caveat that says, "Please keep in mind that the resulting configuration must be JSON-serializable", which adds to the confusion. "Delightful Javascript Testing!" Hah!

P.S. The roots property in the config tells Jest where to look for all of your tests. Thought it might help.

Upvotes: 12

Valerie
Valerie

Reputation: 101

The docs were updated to explain the configuration. Here is the link for anyone looking for more information:

https://facebook.github.io/jest/docs/en/configuration.html#content

The gist:

If using the --config <path/to/json> to direct jest to your configuration json file, you only put the JSON information in the file without the "jest" keyword.

// config.json at <path/to/json>
{
   "verbose": true
}

If you want to use the package.json to configure jest, add the "jest" key and then your configuration.

// package.json 
{ 
   "name": "packageName",
   "version": "1.0.0",
   "jest": {
     "verbose": true
   }
}

Upvotes: 8

Manu
Manu

Reputation: 10954

For JEST V20+:

{
 "roots": ["__tests__/"]
}

For v 20-, you will get following warning if you use testPathDirs:

Deprecation Warning:

Option "testPathDirs" was replaced by "roots".

Jest now treats your current configuration as: { "roots": ["tests/unit/"] }

Please update your configuration.

Upvotes: 7

Volker Rose
Volker Rose

Reputation: 1818

Seems to me you can configure jest directly within your package.json, see https://github.com/shidhincr/react-jest-gulp-jspm-seed/blob/master/package.json.

{
  "name": "react-jest-gulp-seed",
  "version": "1.0.0",
  "description": "Seed for React Jest Gulp Project",
  "main": "index.js",
  "scripts": {
    "test": "jest",
    "postinstall": "jspm install"
  },
  "jest": {
    "scriptPreprocessor": "./preprocessor.js",
    "testPathIgnorePatterns": [
      "/node_modules/",
      "/jspm_packages"
    ],
    "unmockedModulePathPatterns": [
      "./node_modules/react"
    ]
  },
  "author": "Shidhin CR <[email protected]> (http://www.undefinednull.com/)",
  "license": "ISC",
  "dependencies": {
    "del": "^1.1.1",
    "gulp": "^3.8.11",
    "gulp-filter": "^2.0.2",
    "gulp-load-plugins": "^0.10.0",
    "gulp-react": "^3.0.1",
    "gulp-shell": "^0.4.1",
    "harmonize": "^1.4.1",
    "jest-cli": "^0.4.1",
    "jspm": "^0.15.5",
    "react": "^0.13.2",
    "react-tools": "^0.13.2",
    "run-sequence": "^1.1.0"
  },
  "devDependencies": {
    "browser-sync": "^2.7.1",
    "gulp": "^3.8.11"
  },
  "jspm": {
    "directories": {},
    "dependencies": {
      "react": "npm:react@^0.13.2"
    },
    "devDependencies": {
      "babel": "npm:babel-core@^5.1.13",
      "babel-runtime": "npm:babel-runtime@^5.1.13",
      "core-js": "npm:core-js@^0.9.4"
    }
  }
}

Upvotes: 17

Carles Barrob&#233;s
Carles Barrob&#233;s

Reputation: 11683

I figured out that the config file is JSON.

{
  "testPathDirs": ["coredata/src"]
}

Unfortunately I found nowhere in the documentation a hint about this.

Upvotes: 44

Related Questions