问题标签 [utest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1150 浏览

debugging - 如何调试 scala.js 单元测试?

我有一些用 utest 编写的 scala.js 单元测试。它们在 sbt 构建中都运行得很好,但是我希望能够在调试器中逐步完成单元测试。使用我最喜欢的 IDE (intellij) 来调试测试是行不通的,因为它会尝试在 JVM 上运行它们。是否有某种方法可以单步执行单元测试,类似于在 chrome 等浏览器中单步执行 (javascript) 应用程序代码的方式?

0 投票
1 回答
129 浏览

scala.js - 如何使用 µtest 测试 scala.js 程序以了解异步发生的副作用?

我有一个 µtest 套件,它需要检查某些异步操作最终是否会产生副作用。由于 javascript(以及因此 scala.js)是单线程的,因此不可能阻塞并等待副作用发生。此外,µtesteventually方法不适用于 javascript 运行时。我该如何进行这样的测试?

0 投票
1 回答
396 浏览

jquery - 模拟 Scala.js 类

我正在尝试测试用 Scala.js 编写的 React 组件,该组件从服务器获取类别列表。我能够为组件提供替代 jQuery 实例,但无法编译 jQuery mock 本身。这是模拟的代码:

根据Scala.js编译器,这段代码有两个问题:

  • 警告:(14, 95) 扩展 js.Any 的特征、类和对象的成员可能只包含调用 js.native 的成员。这将在 1.0 中强制执行。

    override def get(url: String, data: js.Any, success: js.Any, dataType: js.Any): JQueryXHR = {

  • 错误:(19, 9) 扩展 js.Any 的特征、类和对象可能没有内部特征、类或对象

    new JQueryXHR {}

有没有其他方法可以模拟 Scala.js 中的任何本机类(或者实际上有任何其他方法来测试后端查询)?

编辑

如果我抛出extends JQueryStaticnew JQueryXHR {}更改返回类型def get,则该类编译得很好。通过这种方式,我可以编写处理 AJAX 内容的 jQuery 包装器,我将能够对其进行模拟。这会起作用,但似乎很麻烦。有没有其他方法可以做到这一点?

0 投票
1 回答
217 浏览

scala - sbt play 交叉构建项目设置:uTest 运行器没有正确分离客户端/服务器项目

我正在使用具有交叉编译设置的 build.sbt,基本上是“使用 scala-js 示例”的改编版本,并且在为我的测试设置干净的设置时遇到了一些麻烦。具体来说,在运行我的服务器测试时,我的客户端测试也会被执行(这是我想要避免的)。

我按照Cannot get uTest中的说明查看我的测试 并添加

libraryDependencies += "com.lihaoyi" %%% "utest" % "0.3.0"

出于某种原因,我的测试在我添加之前没有执行

testFrameworks += new TestFramework("utest.runner.Framework")

到每个项目定义。也不加

"com.lihaoyi" %% "utest" % "0.3.1" % "test"

到服务器端触发一系列

未找到:object utest [error] import utest._ -style 错误。

在我的印象中,如果有一个干净的设置,我根本不需要添加这些额外的设置。这是我的 sbt 文件:

这里是我的问题的总结:

  • 当我运行客户端/测试时,只执行客户端测试
  • 运行 play-with-scalajs-example/test 时,执行客户端 + 共享测试
  • 奇怪的是,在运行服务器/测试我的服务器和客户端测试时

我如何将我的项目设置修改为

  • 运行 server/test 时找到我的服务器测试
  • 运行 play-with-scalajs-example/test 时运行所有测试
  • 并且还包括运行服务器/测试或客户端测试时的共享测试?

在另一个节点上,有没有办法禁用 scalatest?它导致一个相当不可读的测试输出:

非常感谢和亲切的问候

0 投票
0 回答
95 浏览

scala - Scala 防御性编码围绕 asInstanceOf 强制

一个例子:

这是遇到该异常的源位置,这是该行的副本:

明天我将调试 utest 以跟踪这个特殊情况,这一定是一个边缘情况,因为它只发生在我的一个启用 utest 的项目中(可能与那里的目录路径和包对齐有关)。

但是您能否建议一种避免这种反射错误的防御性编程的良好形式,以便代码可以在调用之前捕获错误条件asInstanceOf,或者,catch 块的惯用代码 - 传达强制失败的原因,以更可行的方式?

0 投票
1 回答
109 浏览

scala - 点击事件测试失败

我正在关注scala.js 的官方教程,在测试部分有一些这样的代码:

for 循环中基于事件的测试失败sbt test

整个项目在这里:https ://github.com/kindlychung/scalajstutorial

点击行为在这里定义:

0 投票
1 回答
413 浏览

scala - 无法让 uTest 运行测试

我正在关注Scala.JS的基本教程。我也关注了Cannot get uTest来查看我的测试

我将 build.sbt 更新为具有以下内容:

我创造了

src/test/scala/tutorial/webapp/TutorialTest.scala

我重新加载 sbt,然后输入“test”,但我总是收到以下错误:

[错误] MyProject/src/main/scala/tutorial/webapp/TutorialTest.scala:3: not found: object utest [error] import utest._

如果我从 build.sbt 中删除 tail {% "test"},我可以从 sbt 运行 'test' 命令,但它不会接受我的测试。

我希望我在这里说得通,这个错误让我很难过。

0 投票
1 回答
277 浏览

scala - 用于自定义 µtest 测试运行器的 Sbt 挂钩

我在 Scala sbt 项目中使用µtest 。我想用定制的测试运行器运行各种测试类,它由这样的代码组成

我希望在运行 sbt test 时执行它,我发现的唯一方法是扩展 utest.Testsuite并将测试方法留空。

这样,sbt 将找到该类并运行它,但该解决方案似乎并不理想。我可以AnotherClassWithTests通过不扩展 utest.Testsuite 来阻止 sbt 的运行程序执行,但我仍然会从 µtests 默认测试运行程序以及我自己的输出中获得不必要的输出。

如何在没有该 hack 的情况下将我的跑步者挂钩sbt test并使用它运行我的所有测试,跳过 µtests 默认跑步者?

我也可以访问 sbt 检测到的 µ-tests 列表吗?

0 投票
2 回答
113 浏览

scala - 如何获取当前 scalajs / uTest 测试用例的名称

如何获取当前运行的 uTest 测试用例的名称?

在测试用例中,我通常使用 println(...) 或 log.debug(...) 来打印和检查各种值。在测试用例的开头,我打印测试用例的名称。

我总是可以这样做:

在这个(极其简化的)示例中,重复了“MyTest01”。我正在寻找的是一种删除重复的方法,例如:

测试名称可从 tests.toSeq().name 获得,但如何知道正在运行什么案例,特别是如果它们使用 sbt 并行运行。

0 投票
1 回答
179 浏览

scala - 如何使用 uTest 测试对象或其他单一资源/禁用并行测试

https://github.com/lihaoyi/utest

如文档中所述,uTest 并行运行测试。如果使用,一个测试套件中的测试用例可以按顺序运行

但是 sbt 总是并行运行不同的测试套件。https://github.com/lihaoyi/utest#parallel-testing

这通常对性能有好处,但在测试对象或其他“单一资源”时,这可能会导致问题。如果在多个测试套件中测试或使用同一对象,这些并行测试可能会相互干扰。

日志是一个很好的例子:日志可以使用一个通用工厂对象,在某些情况下,这个对象可以包含默认日志级别或日志实例的数据结构等状态。日志用于几个软件模块/几个测试套件中,如果其中之一那些测试套件测试日志本身,然后其他测试套件可能会导致日志测试套件中的随机错误结果。数据库是“单一资源”的另一个例子。

有什么方法可以限制 uTest 测试套件的并行运行,以便用户可以决定哪些测试套件始终按顺序运行,哪些测试套件可以并行运行?

例如:依次运行测试套件:com.XXX.yyy.MyTestSuiteA、com.XXX.yyy.MyTestSuiteB 和 com.XXX.yyy.MyTestSuiteC(按此顺序),其余的并行运行(DZ)。

sbt“脚本”不是一个好的解决方案

因为那时没有任何东西是并行运行的,我必须列出所有测试套件。这样的事情可能很好:

这意味着其余的可以以任何顺序并行运行。或者

意味着所有测试套件都按顺序运行