Posted at

Scala.jsでローカルにあるファイルをテストに利用する

More than 3 years have passed since last update.

Scala.jsメモ4つ目


環境

ソフトウェア
バージョン

Scala
2.11.7

Scala.js
0.6.6

sbt-httpserver
0.3.1


目的

Scala.jsでクライアント側の処理を書いている時,ローカルにあるファイルをテストに使いたいと思った.

本来データはWebサーバから取得するのだけど,テストのたびに本番サーバにアクセスする訳には行かない,真面目なテスティングサーバを用意するのは面倒でやりたくない,といった感じの状況.

そこで,src/test/resources/にhtmlファイル等を置き,そこへアクセスする事で,テストを書きつつ本番サーバへのアクセスをなくす,という戦略を考えた.


sbt-httpserver プラグイン

調べたら具合の良いプラグイン(sbt-httpserver)が見つかったので試してみた.まず,plugins.sbt

/* sbt-httpserver */

resolvers ++= Seq(
Resolver.url("wav", url("https://dl.bintray.com/wav/maven"))(Resolver.ivyStylePatterns),
"Scalaz Bintray Repo" at "http://dl.bintray.com/scalaz/releases") // scalaz-stream
addSbtPlugin("wav.devtools" % "sbt-httpserver" % "0.3.1")

と書いてpluginを追加し,build.sbtに以下のように書くと,

import wav.devtools.sbt.httpserver.{SbtHttpServerPlugin,FileServer}

import SbtHttpServerPlugin.autoImport._

enablePlugins(SbtHttpServerPlugin)
addHttpServices(
_ += FileServer.service("test", (resourceDirectories in Test).value)
)

sbt起動中,http://localhost:8083/test/以下にアクセスする事で,リソースファイル(デフォルトではsrc/test/resources/以下)へアクセスできる.

これで当初目的は大凡達成できたが,ファイルサーバとしての設定記述をしたので,postメソッドが利用できないのは問題として残っている.実際に処理をするのではなく,想定されているフロー通りに動くモックがあればいいので,是非どうにかしたい.