You are overwriting moduleDirectories and you don't include the default, which is ["node_modules"]. You are including <rootDir>/node_modules instead, which is not the same, because that will only look into the node_modules in the root of your project, whereas "node_modules" follows the module resolution of Node.js. The behaviour of Node.js is to look for node_modules in the current directory, if the module is not found it looks in its parent directory (../node_modules) and so on until the module was found or the root of your file system is reached. For more details see Loading from node_modules Folders.
The important difference is that nested modules break if you change the default behaviour. In your case react-router-dom uses react-router as a dependency, and the node_modules might look like this:
node_modules
├─ jest
└─ react-router-dom
└─ node_modules
└─ react-router
In this example, node_modules in the root directory only contains jest and react-router-dom, so it wouldn't find react-router.
Note: npm started hoisting dependencies with version 3 and the result would look like this:
node_modules
├─ jest
├─ react-router-dom
└─ react-router
See also npm v3 Dependency Resolution.
If you are indeed using a severely outdated npm version, you should upgrade immediately. But you should never rely on that behaviour, and always include the default module resolution.
"jest": {
"testPathIgnorePatterns": [
"/node_modules/"
],
"moduleDirectories": [
"node_modules",
"<rootDir>/src"
]
}