• Stars
    star
    107
  • Rank 313,460 (Top 7 %)
  • Language
    Clojure
  • Created almost 6 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Visual display for ClojureScript tests.

cljs-test-display

Clojars Project

cljs-test-display is a library that produces a visual display of an in-browser ClojureScript test run.

Overview

cljs-test-display is a ClojureScript library that you can use along with your web-based test runner to provide visual and system feedback for your test runs.

If you have tests written with cljs.test and you can run them in the browser you can use cljs-test-display.

Features

  • Fully compatible with cljs.test

  • Small understandable codebase

  • Only a ClojureScript library, no server-side component

  • No dependencies

  • Red/green favicon feedback

  • Numbered stacktraces for test exceptions in the dev console

  • Hide/show passing tests with a key-press

  • System notifications for passing and failing test runs

  • Straightforward integration
;; where "app" is the HTML node where you want to mount the tests
(cljs.test/run-tests 
  (cljs-test-display.core/init! "app") ;;<-- initialize cljs-test-display here
  'example.foo-test 
  'example.bar-test 
  'example.baz-test)

Usage

You will need to be familiar with how to create a ClojureScript application and run it in a browser.

Dependencies

You will need to add [com.bhauman/cljs-test-display "0.1.1"] to your project's dependencies along with a recent version of ClojureScript. It has been tested with [org.clojure/cojurescript 1.10.238] and above, but it should work with almost any version of ClojureScript that includes cljs.test.

Test runner integration

First, you will need to require cljs-test-display.core in your test runner, then call the cljs-test-display.core/init! function. init! returns a cljs.test environment much like cljs.test/empty-env initialized so that cljs-test-display is engaged.

Example: test/example/test_runner.cljs

(ns example.test-runner
  (:require 
    [cljs.test]
    [cljs-test-display.core]
    [example.foo-test]
    [example.bar-test]
    [example.baz-test])
  (:require-macros
    [cljs.test]))
	
(defn test-run []
  ;; where "app" is the HTML node where you want to mount the tests
  (cljs.test/run-tests 
    (cljs-test-display.core/init! "app") ;;<-- initialize cljs-test-display here
    'example.foo-test 
    'example.bar-test 
    'example.baz-test))

Providing init! the element id is optional: app is the default.

It is important to note that the cljs-test-display.core/init! function is designed to be called repeatedly in the same environment, to facilitate hot reloading and test re-runs.

For the best development experience, invoke your test runner after every hot reload.

HTML host file

The HTML that hosts the tests can be very simple.

Example resources/public/tests.html file:

<html>
  <!-- the head element is required as this is where we add CSS and favicon elements -->
  <head></head>
  <body>
    <div id="app"></div>
    <script src="[path to your compiled cljs]" type="text/javascript"></script>
  </body>
</html>

Configuration

You can configure cljs-test-display by adding keys to the :closure-defines key in your ClojureScript compiler options.

{:main example.core
 :output-to "main.js"
 ...
 :closure-defines {
    ;; set the element id of where the tests will mount
    cljs-test-display.core/root-node-id "test-app" ;; default "app"
	
    ;; disable the favicon changing behavior
    cljs-test-display.core/change-favicon false    ;; default true
	
    ;; disable the system notifications
    cljs-test-display.core/notifications  false    ;; default true
	
    ;; enable the printing of test results
    cljs-test-display.core/printing       true     ;; default false
 }}

Providing your own style

You can override the injected CSS by supplying your own CSS via an HTML tag with an id cljs-test-display-style.

For Example:

<html>
  <head>
    <!-- override injected css -->
    <link id="cljs-test-display-style" type="text/css" href="css/my-css.css">
  </head>
  <body>
  
    ;; you can also place CSS here if you only wish to ammend the CSS
	
    <div id="app"></div>
    <script src="[path to your compiled cljs]" type="text/javascript"></script>
  </body>
</html>

Development

You should be able to work on cljs-test-display by forking/cloning this repo and then cding into the cljs-test-display directory and running.

clojure -A:build

This will auto-compile and send all changes to the browser without the need to reload. After the compilation process is complete, you will get a Browser Connected REPL. An easy way to try it is:

(js/alert "Am I connected?")

This should cause an alert to pop up in the browser window.

You will now be able to live edit the code in src/cljs-test-display/core.cljs and live edit the CSS in resources/public/com/bhauman/cljs-test-display/css/style.css.

To clean all compiled files:

rm -rf target/public

License

Copyright Β© 2018 Bruce Hauman

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

More Repositories

1

lein-figwheel

Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding!
Clojure
2,891
star
2

devcards

Devcards aims to provide a visual REPL experience for ClojureScript
Clojure
1,521
star
3

rebel-readline

Terminal readline library for Clojure dialects
Clojure
670
star
4

figwheel-main

Figwheel Main provides tooling for developing ClojureScript applications
Clojure
631
star
5

flappy-bird-demo

Live interactive coding Flappy Bird in ClojureScript
JavaScript
145
star
6

figwheel-template

A Leinigen template for figwheel
Clojure
137
star
7

spell-spec

clojure.spec.alpha helpers that check for misspelled map keys, with expound integration
Clojure
132
star
8

dotsters

A game implemented in ClojureScript with the core.async library.
CSS
125
star
9

figwheel-main-template

A template to generate a minimal figwheel-main based ClojureScript project
Clojure
83
star
10

react-native-figwheel-bridge

Enables React Native projects written in ClojureScript to use Figwheel's live reloading and REPL.
JavaScript
78
star
11

certifiable

A helper tool that simplifies the creation of development time SSL certificates for use with Java Webservers like Jetty.
Clojure
44
star
12

figwheel-repl

Figwheel REPL provides a stable multiplexing REPL for ClojureScript
Clojure
44
star
13

crashverse

Clojure
41
star
14

advent-of-clojure-2016

My Advent of Code 2016 solutions in Clojure
Clojure
31
star
15

advent-of-clojure

My solutions to the Advent of Code
Clojure
28
star
16

flappy-bird-demo-new

This is the original Flappy Bird Demo updated to use the latest incarnation of Figwheel.
Clojure
24
star
17

strictly-specking

Clojure
22
star
18

figwheel-core

Figwheel core provides code reloading facilities for ClojureScript.
Clojure
22
star
19

devcards-template

A leinigen template for ClojureScript devcards
Clojure
19
star
20

jspec-rails

Javascript BDD integration for Ruby on Rails
JavaScript
16
star
21

cljs-react-reload

Hot reload React classes in cljs
Clojure
15
star
22

javascript_yome_widget

A JavaScript Yome widget written for a blog post.
JavaScript
14
star
23

async-explore

Exploring how core async interfaces with the daily grind of web dev.
Clojure
14
star
24

sonic-cljs

Using ClojureScript, Tone.js and React to make a declarative live coding library
JavaScript
14
star
25

bhauman.github.com

My blog
JavaScript
13
star
26

figwheel.tools

nREPL support for ClojureScript
Clojure
10
star
27

cohortly

Cohort analysis engine for Rails utilizing mongodb and map reduce
JavaScript
9
star
28

talk-slides

Clojure
5
star
29

font_squirreler

A thor script to squirrel away some fontsquirrel.com webfonts locally or on s3.
4
star
30

unabjah

Simply Unobtrusive Javascript
JavaScript
3
star
31

moriscore

Giving mori.js underscore like usage patterns.
CoffeeScript
3
star
32

nextpress

A jekyl like static site generator that runs in the browser and uses AWS S3
Clojure
3
star
33

metacircular

interuptable metacircular interpreter with first class macros
Clojure
2
star
34

strange-loop-2015

Clojure
2
star
35

frontier

functional front end web dev - WIP
JavaScript
1
star
36

advent-of-code-2022

Advent of code solutions in Clojure for 2022
Clojure
1
star
37

figwheel-main-testing

integration testing for figwheel-main
Clojure
1
star
38

rgba_rack

A set of image servers to make up for lack of rgba() support and linear_gradient support.
Ruby
1
star
39

leaves-client

This is an experimental client for an immutable JSON document service
CoffeeScript
1
star
40

ml-class

Machine learning class from stanford
MATLAB
1
star
41

simple-lein-profile-merge

A simple Clojure library to help fetch configuration information from your project.clj without needing to load Leiningen.
Clojure
1
star