使ClojureScript编译器输出多个独立的.js文件,以便在赛普拉斯中使用

kam*_*uel 6 compilation leiningen clojurescript cypress

我正在尝试使用ClojureScript编写用于使用的项目的赛普拉斯测试lein-cljsbuild.使用以下配置,我能够将单个测试命名空间编译为单个.js文件:

:cljsbuild
  {:builds [{:id "cypress"
             :source-paths ["test/cypress"]
             :compiler     {:optimizations :simple
                            :main          "specs.login-spec"
                            :output-to     "cypress/integration/login_spec.js"
                            :output-dir    "test-resources/cypress/js/build/"}}]}
Run Code Online (Sandbox Code Playgroud)

以上工作正常,并在赛普拉斯正确执行.

现在我想缩放它.这是我的要求:

  • 已经写了多规格在ClojureScript: ,specs.login-spec,specs.shopping-cart-spec,specs.checkout-spec等等(我希望有几十那些).
  • 我希望赛普拉斯将它们识别为独立的测试套件(例如,我可以独立执行它们).这意味着每个ClojureScript测试命名空间必须以独立的JS文件结束,即不依赖于任何其他JS文件.
  • 我希望能够合理地快速编译所有规格.
  • 我希望源代码可以通过简单的设置获得,即lein cljsbuild auto …应该仍然有效,并使用增量构建.

我该如何做到这一点?

最天真的方法是为每个规范指定一个构建计划.但这意味着对于N规格,我需要运行编译N次.那将是非常缓慢的.

突然出现在我脑海中的另一个想法是ClojureScript模块,但以下设置会发出空文件:

{:id "cypress"
 :source-paths ["test/cypress"]
 :compiler {:optimizations :simple
            :output-dir    "test-resources/cypress/js/build/"
            :modules {:m1 {:output-to "cypress/integration/login_spec.js"
                           :entries #{"specs.login-spec"}}
                      :m2 {:output-to "cypress/integration/checkout_spec.js"
                           :entries #{"specs.checkout-spec"}}}}}
Run Code Online (Sandbox Code Playgroud)

我的spec文件现在非常简单 - 单独地,它们在赛普拉斯编译和运行就好了.例:

(ns specs.login-spec
  (:require [tools.commands]
            [tools.interop :refer [cy describe it]]))

(describe "Lorem" (fn []
  (describe "Ipsum" (fn []
    (it "Blah!" (fn []
      (-> cy
        (.LogInAndNavigate)
        …)))))))
Run Code Online (Sandbox Code Playgroud)