LoginSignup
23
13

More than 5 years have passed since last update.

jest で Node.js の テストするなら testEnvironment: "node" を使う

Posted at

jest はデフォルトコンテキストが browser になる

そのため axios とかだと内部に使われるhttp requestライブラリがデフォルトで XHR になる。

XHR になると、Nodeのhttpモジュールとは違い、CORSの制約などの細々した制約を受けてしまう。

受けた結果、 jestでだけNetwork Error になる、CORSのエラーとしてわかりやすいエラーが出てくれたら良いが、 Network Error とだけ返ってくる事になり、意味不明の状態で半日デバッグしていたら、jsdom/xmlhttprequest で変な問題を見つけた。

どうも origin が "null" (string の null) のときと access-control-allow-origin のヘッダに何も指定しないと null (普通のnull) になり、同一性チェックに失敗するようだ。

jsdom だけのコードにして再現させるまでの時間がなかったので、再現コードを作ることができなかった。そのせいですでにクローズされている。

ただこれが jsdom のせいなのか、 jest のせいなのかもう少し調べようかと思っているうちに同僚から "testEnvironment" のプロパティを教えてもらった。

"jest": {
    "testRegex": "(/__tests__/.*|\\.(test))\\.(js)$",
    "testEnvironment": "node"    // <= 新規追加
  }

これで node として実行できるので今言った問題は解消。もう少し jest のドキュメントを見ましょうという教訓になった。。。

23
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
13