使用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.js
和browser-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.js
和fastopt.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 测试