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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ScalaTest和Selenium测试Scala.JS + Play相关的知识,希望对你有一定的参考价值。

我正在努力学习如何使用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,但无法从ReadMe告诉它应该解决的问题。

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

答案

我不知道问题究竟在哪里,但如果你想要一个有效的例子,请随意浏览Querki的源代码。一些相关文件:

我不会说它是最优雅的测试代码(几年前我写过它,并且有一些实验我现在会采用不同的方式),但它按预期工作:它启动Chrome,通过Selenium连接并放置所有内容通过他们的步伐。它不使用scala-js-env-selenium(比这更新),但确实使用ScalaTest+Play

以上是关于使用ScalaTest和Selenium测试Scala.JS + Play的主要内容,如果未能解决你的问题,请参考以下文章

多级测试类层次结构中的 Spring @ContextHierarchy(使用 Scala 和 ScalaTest)

如何在 ScalaTest / SBT 中按顺序运行测试套件?

如何使用 SBT Jenkins 插件运行特定测试以进行 ScalaTest 测试

在 IntelliJ 调试器中隔离单个 ScalaTest 测试而不使用断点

如何让测试在 Scalatest 中始终以相同的顺序运行?

如何在ScalaTest中按顺序运行类中的测试?