Qiitaからの移植


Scala.jsメモ2つ目

環境

ソフトウェア バージョン
Scala 2.11.7
Scala.js 0.6.6

まとめ

  • Scala.jsの単体テストでは,URLにアクセスができない
  • Phantom.jsのコマンドライン引数の変更でアクセスできるようになる

やりたいこと

テストデータとして,外部のURL(localhostを含め)を使いたい.例えば,対応するWebサービスのサーバへアクセスしてデータを取ってきたりとか,. しかし,単体テストでの外部URLアクセスはデフォルトで不可能となっている.

例えば,http://localhost:631(LinuxだとCUPSのクライアントがよく動いている)にjQueryを用いてリクエストを以下のように飛ばすと,いつまでもcallback関数が呼ばれない.

jQuery.get("http://localhost:631", null, (e: dom.Event) => {
  println("called!")
})

やったこと

参考にしたページURLをメモし忘れてしまったが,Stack Overflowだったかどこかのページによると,クロスドメインの類の問題らしい.なので,

scalaJSUseRhino in Global := false
jsEnv in Test := PhantomJSEnv(args = Seq("--web-security=no")).value

build.sbtに追記して,単体テストでPhantom.jsを利用し,さらにクロスドメインアクセスを許可するとcalled!と表示されるようになる.

おわりに

明らかにいい方法ではないので,もっといい方法があれば教えて下さい.そもそも,Scala.jsの単体テストはURLにアクセスするべきではなく,他に方法がある,とかも含めて教えて頂けたら嬉しいです.