使用ScalaTest和Selenium测试Scala.JS + Play

时间:2018-03-02 16:16:10

标签: playframework scalatest scala.js

我正在努力学习如何使用Selenium和ScalaTest测试我的Play + Scala.JS项目。我在浏览器上运行了大量与Play后端交互的代码;似乎使用Selenium是测试一切正常工作的好方法。

我目前的项目是按照以下模块组织的:

xplatform          Scala code running on both JVM and JS
  ├── browser      Scala code running on the browser
  ├── server       Common code running on the (Play) server
        ├── wapp   Web app: controllers and such
        ├── wsvc   Web services:  controllers and such

根模块依赖并聚合wapp,wsvc和浏览器。

我为Selenium测试创建了一个单独的模块(selTests)。它取决于wapp和wsvc。我把selenium测试放在一个单独的模块中,因为如果它们在根模块中运行test-only selTests.MyTest在所有模块中查找它,这会使我烦恼并减慢一切。将它放在一个单独的模块中,我可以project selTests然后test-only ...并且只运行该测试。

这在那些不使用Scala.JS代码的网页上运行正常(即:不要使用浏览器模块),因为它无法加载browser-jsdeps.jsbrowser-fastopt.js 。你会说,"啊哈!但是你没有让selTests依赖于浏览器!"。如果我这样做,运行测试会产生以下错误并挂起SBT:

[seleniumTests] $ test-only selTests.general.HomePageRootPermsSpec
[error] Uncaught exception when running tests: java.io.InvalidClassException: sbt.testing.TaskDef; local class incompatible: stream classdesc serialVersionUID = -7417691495999416204, local class serialVersionUID = 2663134200025980977
[trace] Stack trace suppressed: run last seleniumTests/test:testOnly for the full output.
^Cbelser:oat3 bwbecker$ 

如果我将测试移到根项目中,它仍然找不到jsdeps.jsfastopt.js资源。

我刚刚找到scala-js/scala-js-env-selenium,但无法从自述文件中告诉它应该解决的问题。

那么......你如何使用Selenium和ScalaTest来测试使用Scala.js的Play项目?

1 个答案:

答案 0 :(得分:0)

我不确切地知道问题的确切位置,但如果您想要一个有效的示例,请随意浏览Querki的源代码。一些相关文件:

我不会说这是最优雅的测试代码(几年前我写过这个代码,而且我现在会做一些不同的实验),但它的工作方式是正确的:它启动了Chrome,通过Selenium连接并完成所有步骤。它使用scala-js-env-selenium(比这更新),但使用ScalaTest+Play