

TypeScriptをjestで単体テストを行うべく環境構築中ですが、下記のエラーが出ていて対策が分かりません。  
「tests/index.test.ts」は空ファイルになっています。

[code]

     FAIL  tests/index.test.ts
      ● Test suite failed to run
    
        /home/tatuto/Node-RED/jest-test/node_modules/jest-environment-node/build/index.js:176
            const timerRefToId = timer => timer?.id;
                                                ^
    
        SyntaxError: Unexpected token '.'
    
          102 |       }
          103 | 
        > 104 |       oldLoader(mod, filename);
              |       ^
          105 |     };
          106 |   });
          107 |   return function revert() {
    
          at Object.newLoader [as .js] (../../../../usr/share/nodejs/pirates/lib/index.js:104:7)
          at ScriptTransformer.requireAndTranspileModule (../../../../usr/share/nodejs/@jest/transform/build/ScriptTransformer.js:689:66)
    
    Test Suites: 1 failed, 1 total
    Tests:       0 total
    Snapshots:   0 total
    Time:        2.12 s
    
[/code]

package.json

[code]

    {
      "name": "jest-test",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "jest"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "devDependencies": {
        "@types/jest": "^29.4.0",
        "jest": "^29.4.3",
        "ts-jest": "^29.0.5",
        "typescript": "^4.9.5"
      }
    }
    
[/code]

tsconfig.json

[code]

    {
      "compilerOptions": {
        "target": "es5",
        "module": "commonjs",
        "esModuleInterop": true,
        "forceConsistentCasingInFileNames": true,
        "strict": true,
        "skipLibCheck": true
      }
    }
    
[/code]

jest.config.js

[code]

    /** @type {import('ts-jest').JestConfigWithTsJest} */
    module.exports = {
      preset: 'ts-jest',
      testEnvironment: 'node',
      roots: ["<rootDir>/tests", "<rootDir>/src"],
      collectCoverage: true,
      collectCoverageFrom: [
        "**/*.ts",
        "!**/node_modules/**",
      ],
      coverageDirectory: 'coverage_dir',
      coverageReporters: ["html"]
    };
    
[/code]


CC BY-SA 4.0
2023-03-01T04:11:28.680
94047
2023-03-03T13:15:46.543
57330
question
typescript jestjs
TypeScriptとjestの組み合わせでエラーが出る


## シンプルな答え

Node.jsのバージョンを上げてください

## 解説

質問でエラーになっているコード `timer?.id` は、[optional chaining
(?.)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Optional_chaining)という比較的新しい構文です。

Node.jsでは2020年にリリースされた(すでに3年前ですが) v14よりこれに対応しています。つまり、 **以降のバージョンに更新してください。**

コメントによると、お使いの環境のNode.jsのバージョンは `v12.22.9`
とのことですが、v12はすでにサポートを終了している古いバージョンです。また、v14は今年の4月、v16は9月でサポート期間が終了します。

参考: [Node.js のリリーススケジュール](https://github.com/nodejs/release#release-schedule)

なので、 **特段問題がない場合は現在のLTSバージョンであるv18系へのアップデートを推奨**
します。ただし、使用しているパッケージによってはOpenSSLのアップグレードに対応できていない場合があるので注意してください。  
<https://zenn.dev/ymmt1089/articles/20221120_node_16to18#openssl%E3%81%AE%E4%BA%92%E6%8F%9B%E6%80%A7%E3%82%A8%E3%83%A9%E3%83%BC>

また、それ以外にもNode18に対応していないケースがあるので十分に確認はしてください。

パッケージによっては、package.jsonの`engines.node`に対応バージョンが明示されています。たとえば、質問文内で依存しているパッケージであればv18で問題ないはずです。

なお、node.jsのアップグレードほうほうについては現在の利用法により複数ありますのでここでは説明しません。


CC BY-SA 4.0
2023-03-03T13:15:46.543
94062
2023-03-03T13:15:46.543
2376
94047
answer