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 のドキュメントを見ましょうという教訓になった。。。