在Scala.js中进行单元测试:从位于`test/resources`的文件中读取测试数据

14

在 Scala.js 的单元测试中,从位于 test/resources 目录下的文件中加载测试数据的最简单解决方案是什么?


这里有一点麻烦,fs 操作是异步的,但它们不在测试框架所知道的 ExecutionContext 上执行。仅仅从 Promise 构建一个 Future 是行不通的 - 参见 ScalaTest 问题 #1039 - Suma
在Scala.js中如何读取资源文件? - Rich
1
@Rich 它相似,但测试涉及处理异步操作的特定问题。 - Suma
1个回答

5

事实证明,最近的Scala.js(已测试0.6.14和0.6.15)和Node.js(已测试7.8.0)情况很简单。由于默认情况下使用Node运行器运行测试,因此可以使用Node.js同步文件操作并使用fs readFileSync读取文件。处理此操作的函数可能如下:

  def rscPath(path: String): String = "src/test/resources/" + path

  def rsc(path: String): String = {
    import scalajs.js.Dynamic.{global => g}
    val fs = g.require("fs")

    def readFile(name: String): String = {
      fs.readFileSync(name).toString
    }

    readFile(rscPath(path))
  }

  val testInput = rsc("package/test-input.txt")

除了直接从 src/test/resources 加载它们之外,也可以从 target/scala-2.12/test-classes 加载它们,因为这些文件是由 SBT 构建复制到那里的。如果我能找到一些简单的 API 来获取此路径,以便不必在 rscPath 函数中硬编码它,我认为我更喜欢这种方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接