Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running cljs tests with cljc source #133

Open
milt opened this issue Jun 22, 2015 · 2 comments
Open

Running cljs tests with cljc source #133

milt opened this issue Jun 22, 2015 · 2 comments

Comments

@milt
Copy link

milt commented Jun 22, 2015

Maybe this is an artifact of some of the other tooling involved, but I am getting a strange behavior when I attempt to compile cljs speclj tests from cljc (reader conditional) source. When I attempt to build the tests (using cljsbuild, so lein cljsbuild once dev) I get the old clojure.lang.Compiler$CompilerException: java.lang.ClassNotFoundException: speclj.platform.SpecFailure error, but then it builds, and any test commands execute properly. If the source is just a .cljs file, this does not happen.

Built an example repo to illustrate this here: https://github.com/milt/spectest

To see the error run lein cljsbuild once dev-cljc. For a normal cljs-only build that works fine, lein cljsbuild once dev-cljs.

@Chicker
Copy link

Chicker commented Jul 4, 2015

I have the same error when running tests from the LightTable repl.

In my opinion, this behavior is associated with how speclj determines what language we use ClojureScript or Clojure.

The namespace «speclj.core» have the following code:

(def ^:private ^:no-doc cljs? (boolean (find-ns 'cljs.analyzer)))

(defmacro ^:no-doc -new-failure [message]
  (if cljs? `(speclj.platform.SpecFailure. ~message) `(speclj.SpecFailure. ~message)))

In the first line Speclj determines a language (ClojureScript or Clojure) is used, based on the presence of the loaded namespace named 'cljs.analyzer. That is, for ClojureScript value cljs? It must be true, and for code in Clojure - false.

In the second line variable cljs? is used to select the implementation SpecFailure, which for Clojure and ClojureScript located in different namespace.

The problem of this implementation cljs? is for example IDE LightTable in the repl mode itself uses and loads ns cljs.analyzer, no matter what code (Clojure or ClojureScript) it executes.

I can suggest the following workaround code for Clojure tests:

(remove-ns 'cljs.analyzer)

(ns test.spec
   (:require
    [speclj.core :refer :all :exclude [with]]))

(require '[cljs.analyzer])

(describe "test"
          (it "is true"
              (should= 2 2)))

In the spec-files at first remove cljs.analyzer, that cljs? It was calculated with the value false.
And then restored as it was.

@Jell
Copy link

Jell commented Jul 8, 2015

also getting this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants