sinho provides a matcher called =* for writing tests with a high signal-to-noise ratio.
Works with Clojure, ClojureScript, and Babashka.
See this notebook about Signal-To-Noise Ratio of Software Tests.
sinho is available from Clojars. Add the following dependency to your deps.edn or project.clj:
For Babashka, add to your bb.edn:
{:deps {me.lomin/sinho {:mvn/version "2.1.2"}}}(ns me.lomin.sinho.example-test
(:require [clojure.test :refer :all]
[me.lomin.sinho.matcher :refer [=*]]))
(defn query-twitter-for [_user] ; fake implementation
{:name "Steven Collins"
:twitter "@lomin"
:following 169
:followers 122
:person-of-note {{:name "Borussia Dortmund"
:twitter "@BlackYellow"
:folowing 146
:folowers 4579000} :favorite
{:name "FC Bayern English"
:twitter "@FCBayernEN"
:following 49
:followers 11000000} :blocked}})
(deftest blocks-all-evil-test
(is (=* {:twitter "@lomin"
:person-of-note {{:twitter "@FCBayernEN"} :blocked}}
(query-twitter-for "@lomin"))))
(deftest failing-blocks-all-evil-test
(is (=* {:twitter "@lomin"
:person-of-note {{:instagram "@FCBayernEN"} :blocked}}
(query-twitter-for "@lomin"))))(ns me.lomin.sinho.example-matcher-combinator-test
(:require
[clojure.test :as t :refer [deftest is]]
[me.lomin.sinho.matcher-combinator :refer [=*]]))
(defn query-twitter-for [_user] ; fake implementation
{:name "Steven Collins"
:twitter "@lomin"
:following 169
:followers 122
:person-of-note {{:name "Borussia Dortmund"
:twitter "@BlackYellow"
:folowing 146
:folowers 4579000} :favorite
{:name "FC Bayern English"
:twitter "@FCBayernEN"
:following 49
:followers 11000000} :blocked}})
(deftest blocks-all-evil-test-mc
(is (match? (=* {:twitter "@lomin"
:person-of-note {{:twitter "@FCBayernEN"} :blocked}})
(query-twitter-for "@lomin"))))
(deftest failing-blocks-all-evil-test-mc
(is (match? (=* {:twitter "@lomin"
:person-of-note {{:instagram "@FCBayernEN"} :blocked}})
(query-twitter-for "@lomin"))))The =* matcher API is identical across Clojure, ClojureScript, and Babashka. There are a few differences to be aware of:
- Babashka requires version 0.9.159 or later.
- Test output: On Clojure with Kaocha,
=*failures render as deep-diff2 diffs. On ClojureScript, deep-diff2 diffs are available but without Kaocha integration. On Babashka, you get standardclojure.testfailure output (no deep-diff2 or Kaocha).
Sinho (신호) means signal in Korean.