FakeApplication(additionalConfiguration = Map("key名" -> "値"))
で置き換えられます
ですので、mongoを使っている場合
FakeApplication(additionalConfiguration = Map("mongodb.default.db" -> "dummy_db_name"))
とかで"mongodb.default.db"を書き変えてテストを実行することで、テスト用のDBが使えます
事の経緯
うむ。午後は家に帰って、scalaの勉強しよう。久しぶりにやる気が出た。
— けるけるぱっぱさん (@kerukerupappa) 9月 30, 2012
@3a3k ちょ。普通に無理wwww
— けるけるぱっぱさん (@kerukerupappa) 9月 30, 2012
@3a3k へい。なんでしょ?
— けるけるぱっぱさん (@kerukerupappa) 9月 30, 2012
ということで開催されました、第一回詳しい人が誰もいないScala勉強会@Hangout
乗った RT @3a3k: 詳しい人が誰もいないScala勉強会 @ Hangout はいいかもしれない。
— みやなんとかさんさん (@myb1126) 9月 30, 2012
こんなかんじで みやびさん まで巻き込まれた結果がこれ。
documentにも
「このフェイクアプリケーションに対して追加の設定値を渡す (または上書きする) したり、プラグインをモックすることも可能です。例えば、 default という名前の インメモリデータベースに接続された FakeApplication を起動する場合は、次のように書きます」
FakeApplication(additionalConfiguration = inMemoryDatabase())
とありますが、inMemoryDatabaseは次のようになっています
def inMemoryDatabase(name: String = "default"): Map[String, String] = { Map( ("db." + name + ".driver") -> "org.h2.Driver", ("db." + name + ".url") -> ("jdbc:h2:mem:play-test-" + scala.util.Random.nextInt) ) }
早い話がinMemoryDatabaseを使っても、「mongodb.default.db」を書き換えられるわけないってことでした
残念!
なお、database cleaner 的なものがパッと調べた感じでは見つからなかったので、
上記ではbeforeでテスト用のDBごとdropしてます
参考にしたのはこちら
上記のような方法でとりあえずは気兼ねなくテストケースが書けそうで何よりです。
ただ、毎度毎度書くのは面倒なので、「Specification」を拡張してどっかに置いておくとかのほうがいいと思います。
「いやそもそもこういう便利な方法あるしwww m9。゚(゚^Д^゚)゚。プギャーッハハハハヒャヒャヒャヒャ」
的なツッコミありましたら、教えてください♥
参考
http://playdocja.appspot.com/documentation/2.0.3/ScalaTest
http://modalsoul.github.com/Programing/2012/07/31/Getting-Started-with-Play2-Scala-and-Squeryl/
https://github.com/mongodb/casbah/blob/master/casbah-core/src/test/scala/ConversionsSpec.scala
https://github.com/leon/play-salat
http://stackoverflow.com/questions/10760131/using-specs2-and-fakeapplication-to-test-database-fails-evolution-inserts
等
サンプルとひな形を兼ねて、githubに上げています
g8 daneko/play-salat
で作成した後、play test で動くはずです。
今後も 詳しい人が誰もいないScala勉強会@Hangout をテキトーに開くと思いますw
0 件のコメント:
コメントを投稿