问题标签 [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.
debugging - 如何调试 scala.js 单元测试?
我有一些用 utest 编写的 scala.js 单元测试。它们在 sbt 构建中都运行得很好,但是我希望能够在调试器中逐步完成单元测试。使用我最喜欢的 IDE (intellij) 来调试测试是行不通的,因为它会尝试在 JVM 上运行它们。是否有某种方法可以单步执行单元测试,类似于在 chrome 等浏览器中单步执行 (javascript) 应用程序代码的方式?
scala.js - 如何使用 µtest 测试 scala.js 程序以了解异步发生的副作用?
我有一个 µtest 套件,它需要检查某些异步操作最终是否会产生副作用。由于 javascript(以及因此 scala.js)是单线程的,因此不可能阻塞并等待副作用发生。此外,µtesteventually
方法不适用于 javascript 运行时。我该如何进行这样的测试?
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 JQueryStatic
并new JQueryXHR {}
更改返回类型def get
,则该类编译得很好。通过这种方式,我可以编写处理 AJAX 内容的 jQuery 包装器,我将能够对其进行模拟。这会起作用,但似乎很麻烦。有没有其他方法可以做到这一点?
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?它导致一个相当不可读的测试输出:
非常感谢和亲切的问候
scala - Scala 防御性编码围绕 asInstanceOf 强制
一个例子:
这是遇到该异常的源位置,这是该行的副本:
明天我将调试 utest 以跟踪这个特殊情况,这一定是一个边缘情况,因为它只发生在我的一个启用 utest 的项目中(可能与那里的目录路径和包对齐有关)。
但是您能否建议一种避免这种反射错误的防御性编程的良好形式,以便代码可以在调用之前捕获错误条件asInstanceOf
,或者,catch 块的惯用代码 - 传达强制失败的原因,以更可行的方式?
scala - 点击事件测试失败
我正在关注scala.js 的官方教程,在测试部分有一些这样的代码:
for 循环中基于事件的测试失败sbt test
:
整个项目在这里:https ://github.com/kindlychung/scalajstutorial
点击行为在这里定义:
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' 命令,但它不会接受我的测试。
我希望我在这里说得通,这个错误让我很难过。
scala - 用于自定义 µtest 测试运行器的 Sbt 挂钩
我在 Scala sbt 项目中使用µtest 。我想用定制的测试运行器运行各种测试类,它由这样的代码组成
我希望在运行 sbt test 时执行它,我发现的唯一方法是扩展 utest.Testsuite并将测试方法留空。
这样,sbt 将找到该类并运行它,但该解决方案似乎并不理想。我可以AnotherClassWithTests
通过不扩展 utest.Testsuite 来阻止 sbt 的运行程序执行,但我仍然会从 µtests 默认测试运行程序以及我自己的输出中获得不必要的输出。
如何在没有该 hack 的情况下将我的跑步者挂钩sbt test
并使用它运行我的所有测试,跳过 µtests 默认跑步者?
我也可以访问 sbt 检测到的 µ-tests 列表吗?
scala - 如何获取当前 scalajs / uTest 测试用例的名称
如何获取当前运行的 uTest 测试用例的名称?
在测试用例中,我通常使用 println(...) 或 log.debug(...) 来打印和检查各种值。在测试用例的开头,我打印测试用例的名称。
我总是可以这样做:
在这个(极其简化的)示例中,重复了“MyTest01”。我正在寻找的是一种删除重复的方法,例如:
测试名称可从 tests.toSeq().name 获得,但如何知道正在运行什么案例,特别是如果它们使用 sbt 并行运行。
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“脚本”不是一个好的解决方案
因为那时没有任何东西是并行运行的,我必须列出所有测试套件。这样的事情可能很好:
这意味着其余的可以以任何顺序并行运行。或者
意味着所有测试套件都按顺序运行