jest

jest.moduleNameMapper は一番最初にマッチしたパターンが使われる

問題

こんな感じに設定してた。

{
  "jest": {
    "moduleNameMapper": {
      "^components": "<rootDir>/src/scripts/components",
      "^components/(.+)": "<rootDir>/src/scripts/components/$1",
    }
  }
}

ただこれだと、import Foo from 'components/foo'としても、components/indexが返されてしまっていた。

解決

順番やパターンを変える。

{
  "moduleNameMapper": {
    "^components/(.+)": "<rootDir>/src/scripts/components/$1",
    "^components": "<rootDir>/src/scripts/components",
  }
}

or

{
  "moduleNameMapper": {
    "^components(?!/)": "<rootDir>/src/scripts/components",
    "^components/(.+)": "<rootDir>/src/scripts/components/$1",
  }
}

or

{
  "moduleNameMapper": {
    "^components(.*)": "<rootDir>/src/scripts/components$1"
  }
}