A ClojureScript BDD testing framework based on Jasmine that displays your test results in a browser page and comes with auto-refresh.
(ns my.test.ns
(:require-macros [cljasmine.macros :as j])
(:require [cljasmine.checkers]))
(j/describe "The value true"
(j/it "should be true"
(j/expect true := true))
(j/it "should not be false"
(j/expect true :not= false)))- When changing a file in your source folder, you won't see any
changes in your browser until you touch a file in your test
folder. That is because we haven't yet found a way to make
lein cljsbuild autodo what we want (see lein-cljsbuild issue 159) - Hasn't yet been tested with advanced compilation - but this can't be too hard either..
- Leiningen
1.7.0or higher to work with lein-cljsbuild - A working Ruby toolchain including Bundler.
- If you want the auto-refresh (you do), you'll need the LiveReload Browser Extension.
- Clone this repository and
cdinto it. - Do
bundle install. - Do
foreman start. - You might get a
TSP server error: Address already in use. Not sure how this happens, but it will work anyways oO - Point your browser to http://localhost:8888. You should see a few passing specs now.
- Enable the LiveReload plugin now, if you installed it.
- Open
test/cljasmine/core_test.cljsin an editor of your choice. - Try to break one of the test cases (for example by replacing one
:<by:>). - Save the file
- After a few seconds, you'll see the failure in your browser. Without LiveReload, you'll need to hit refresh.
- Do
lein installin the cljasmine directory. - Copy over the following stuff to your own project directory:
- The
specdirectory. Gemfile,Rakefile,Procfile, andGuardfile.
- The
- Configure lein-cljsbuild in your
project.cljsimilar to cljasmine's own project file. If you want to change the path ofunit-test.js, you'll need to adjustspec/javascripts/support/jasmine.ymlaccordingly. - Start writing tests and do the same as above.
(j/defchecker :has-key [result key]
(when-not (get result key)
["Actual result:" result
"doesn't contain the key:" key]))You may also return a string or a keyword for the error message. Now, you can write:
(j/describe "The map {:a 1}"
(j/it "contains the key :a"
(j/expect {:a 1} :has-key :a)))If you define the checker in another namespace, remember to require it from the tests.
Awesome idea!
Copyright © 2012 Jan Krüger & Benjamin Teuber
Distributed under the Eclipse Public License, the same as Clojure.