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

时间:2018-02-20 09:48:57

标签: compilation clojurescript leiningen cypress

我正在尝试为使用lein-cljsbuild的项目设置用ClojureScript编写的赛普拉斯测试。使用以下配置,我能够将单个测试命名空间编译为单个.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/"}}]}

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

现在我想缩放它。以下是我的要求:

  • 有多个使用ClojureScript编写的规范:specs.login-specspecs.shopping-cart-specspecs.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"}}}}}

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

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

(describe "Lorem" (fn []
  (describe "Ipsum" (fn []
    (it "Blah!" (fn []
      (-> cy
        (.LogInAndNavigate)
        …)))))))

0 个答案:

没有答案