practicalli / practicalli/clojure

Spec: add more commonpractices

Open
#477 0 comments 0 reactions 1 assignee View on GitHub

@practicalli-johnny is already working on this.

Since Sep 12, 2025.

Dominant language
Makefile
Stars
117
Forks
36
PR merge metrics
No merged PRs in 30d

Description

Update Practicalli Clojure spec section to include more common practices, especially in organising specs and Generative tests
https://practical.li/clojure/clojure-spec/organising-specs/

Commercial experiences

  • Statsbomb (kafka)
  • Griffin (db abstraction & generative testing)
  • Billie (web)

Community

https://clojurians.slack.com/archives/C1B1BB2Q3/p1757527317316049?thread_ts=1757523204.900519&cid=C1B1BB2Q3

Where do you put the specs?
For domain, I prefer one or more namespaces dedicated to this (consider two layers - one for types, one for attributes) and included via :as-alias
For functions, in a foo.specs namespace
How do you validate the domain constructs? Via pre-/postconditions, within the functions via s/valid?, with s/fdefs and instrumentation or with custom validators?
s/valid? for data validation from public inputs
s/fdef / instrumentation for tests of functions
How do you report spec failures? Just the error or with explain or expound?
for internal stuff, probably s/explain
for public stuff, consider expound or custom
Do you validate at dev-time only or also in production?
for user-side inputs, production
for catching your own programming errors, dev-time only
What libs/tools do you use other than plain spec?
test.chuck

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.