Posted at

Scala.jsの単体テストでURLへアクセスする

More than 3 years have passed since last update.

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にアクセスするべきではなく,他に方法がある,とかも含めて教えて頂けたら嬉しいです.