Kotlin JS Karma测试超时:修改配置无效求助
解决Kotlin JavaScript Karma测试超时问题
问题描述
运行Kotlin JavaScript的Karma测试时触发超时错误:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
项目当前build.gradle.kts配置:
js(IR) { useCommonJs() browser { testTask { useKarma { useChromeHeadless() } } } binaries.executable() }
尝试在karma.config.d/karma.conf.js中增加超时时间,配置已合并到build/js/packages/project-name-test/karma.conf.js但未生效,自定义配置内容:
module.exports = function (config) { config.set({ crossOriginAttribute: false, processKillTimeout: 90000, browserDisconnectTimeout: 90000, browserNoActivityTimeout: 90000, frameworks: ['mocha'], client: { timeout: "9s", mocha: { timeout: "9s", reporter: "spec", args: ["timeout", "9s"] }, } }); };
解决方法
1. 通过Gradle配置直接设置Mocha超时
Kotlin Gradle插件会生成Karma基础配置,自定义配置可能被插件覆盖,建议直接在build.gradle.kts中通过clientConfig设置Mocha参数,确保配置生效:
js(IR) { useCommonJs() browser { testTask { useKarma { useChromeHeadless() // 配置Mocha超时为9秒 clientConfig.put("mocha", mapOf( "timeout" to 9000 )) } } } binaries.executable() }
2. 检查异步测试代码逻辑
超时错误的核心原因可能是异步测试未正确完成:
- 使用
done()回调的测试,必须在异步操作结束后调用done(),异常场景要传入done(error) - 返回Promise的测试,要确保Promise最终会resolve,避免出现挂起或未处理的reject
3. 调整Karma全局超时参数
如果是浏览器连接或进程超时问题,可在Gradle中补充全局超时配置:
js(IR) { useCommonJs() browser { testTask { useKarma { useChromeHeadless() // 设置全局超时参数 config.set("browserDisconnectTimeout", 90000) config.set("browserNoActivityTimeout", 90000) config.set("processKillTimeout", 90000) // 同时配置Mocha超时 clientConfig.put("mocha", mapOf( "timeout" to 9000 )) } } } binaries.executable() }
内容的提问来源于stack exchange,提问作者vovahost
相关产品推荐
相关产品推荐

