Asynchronous ClojureScript cljs.core.async/go不';不要在jsdom中工作
我正在尝试将ClojureScript测试从“Chrome Headless”迁移到使用和作为测试运行程序 需要访问DOM或浏览器API的常规测试工作正常。但是使用Asynchronous ClojureScript cljs.core.async/go不';不要在jsdom中工作,asynchronous,karma-runner,clojurescript,jsdom,clojurescript-javascript-interop,Asynchronous,Karma Runner,Clojurescript,Jsdom,Clojurescript Javascript Interop,我正在尝试将ClojureScript测试从“Chrome Headless”迁移到使用和作为测试运行程序 需要访问DOM或浏览器API的常规测试工作正常。但是使用cljs.core.async/go的异步测试不起作用。基本上,go中没有执行任何内容 有没有人知道会出什么问题?我错过了一些配置吗?这只是jsdom问题还是cljs.core.async互操作性问题 我在下面给出了一个简单的测试示例 (ns async-tests (:require [cljs.test :refer [def
cljs.core.async/go
的异步测试不起作用。基本上,go
中没有执行任何内容
有没有人知道会出什么问题?我错过了一些配置吗?这只是jsdom
问题还是cljs.core.async
互操作性问题
我在下面给出了一个简单的测试示例
(ns async-tests
(:require [cljs.test :refer [deftest async]]
[cljs.core.async :refer [go <! timeout]]))
(deftest async-go-test
(async done
(.log js/console "Before go is printed")
(go
(.log js/console "After go is never printed")
(<! (timeout 1))
(done))))
使用的库的版本:
"devDependencies": {
"jsdom": "^16.4.0",
"karma": "^5.2.3",
"karma-cljs-test": "^0.1.0",
"karma-jsdom-launcher": "^8.0.2",
"shadow-cljs": "2.10.19"
}
业力配置:
module.exports = function (config) {
config.set({
browsers: ['jsdom'],
basePath: 'target',
files: ['ci.js'],
frameworks: ['cljs-test'],
colors: true,
logLevel: config.LOG_INFO,
client: {
args: ["shadow.test.karma.init"]
},
jsdomLauncher: {
jsdom: {
resources: "usable",
runScripts: "dangerously",
pretendToBeVisual: true
}
}
})
};
我想对Clojure社区说声“谢谢”,他们帮助我找到了解决这个问题的方法,尤其是@thheller。
根本原因尚未找到,但可能是使用
不同图书馆的范围
变通办法
您必须为您的测试重写goog.async.nextTick
方法
js/setTimeout
例子
创建jsdom设置
名称空间
(ns jsdom-setup)
(set! (.. js/window -goog -async -nextTick) js/setTimeout)
并将其添加到“shadow cljs.edn”中的测试JS输出中
:构建{:业力{:目标:业力
:输出到“output/tests bundle.js”
:ns regexp“(setup jsdom |[.-]tests$)”}
链接
(ns jsdom-setup)
(set! (.. js/window -goog -async -nextTick) js/setTimeout)