Jestで外部APIをコールしたときに、Error: Headers User-Agent forbiddenが出る件


はじめに

Nodeのプロジェクトで、Jestを使ってテストコードを書いているときに外部のAPIをコールすると、以下のようなエラーが出てテストが失敗してしまう。

Network Error

      at createError (node_modules/axios/lib/core/createError.js:16:15)
      at XMLHttpRequest.handleError (node_modules/axios/lib/adapters/xhr.js:83:14)
      at XMLHttpRequest.el.addEventListener.event (node_modules/jsdom/lib/jsdom/living/helpers/create-event-accessor.js:33:32)
      at innerInvokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:316:27)
      at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:267:3)
      at XMLHttpRequestEventTargetImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:214:9)
      at fireAnEvent (node_modules/jsdom/lib/jsdom/living/helpers/events.js:17:36)
      at requestErrorSteps (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:121:3)
      at dispatchError (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:51:3)
      at validCORSPreflightHeaders (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:91:5)
      at Request.preflightClient.on.resp (node_modules/jsdom/lib/jsdom/living/xhr-utils.js:361:12)
      at Request.onRequestResponse (node_modules/request/request.js:1059:10)

  console.error node_modules/jsdom/lib/jsdom/virtual-console.js:29
    Error: Headers User-Agent forbidden
        at dispatchError (以下略)

ネットで検索したら、SlackAPIでissueが上がっていた。

https://github.com/slackapi/node-slack-sdk/issues/655

で、結論から言うと、この記事にあるように、package.jsonに以下の記述を追加すれば良い。

"jest": {
  "testEnvironment": "node"
},

結構ハマったので、記事にしておきました。以上。