Asynchronous ClojureScript cljs.core.async/go不';不要在jsdom中工作

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

我正在尝试将ClojureScript测试从“Chrome Headless”迁移到使用和作为测试运行程序

需要访问DOM或浏览器API的常规测试工作正常。但是使用
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)