Generative testing, also called Property Based testing, is a powerful technique able to expose some of the most obscure bugs. You’ll learn how to create and compose generators, and how to define properties that together can verify many aspects of your code.
Learn how to use a headless web browser to test your application for feature completeness. You’ll also see how Component can be used to set up an isolated test environment, how to use fixtures and dynamic var bindings to share setup code between tests, and how to keep tests readable and concise by judicously pulling code into helper functions.
Learn how to run tests with Figwheel, PhantomJS, Node, doo, and Karma.
Testing libraries and frameworks are indispensable, but there’s no magic to how
they work. Through implementing your own mini testing framework, you’ll learn
clojure.test does things under the hood.
While the main plot demonstrates how to write a function test-first, you’ll also
meet several supporting characters, like preconditions, dynamic bindings, and
even a macro. Finally the mask comes off. It was
clojure.test all this time!
Learn how to incorporate Component in a real world project. This episode is a bit of grab bag. It shows how to set up a
-main function and how to use it, how to use reloaded.repl and tools.namespace for a better REPL workflow. You get introduced to the Suspendable protocol that complements Component’s Lifecycle protocol. Finally it shows how to streamline your configuration with Aero.
Now that the “birch” command is working, it’s time to release it to the world. In this episode you’ll learn how to turn your Lumo script into an NPM package. You’ll also learn how to use packages from NPM (cli-colors) and Clojure library jars (tools.cli) to make your script even more awesome.
JVM based Clojure isn’t very suitable for command line scripting. On the command line you want quick feedback, which is at odds with the time Clojure needs to boot up, and just to run a single source file you need to jump through a few hoops.
Instead you can use Lumo, a ClojureScript runtime environment based on Node.js. In this episode you’ll learn how to write a script in Lumo, and how to make use Node’s built-in libraries, by building your own version of the Unix “tree” command. It’ll also be a handy refresher on recursion.
In this beginner friendly episode you’ll learn how to resolve a common type of Clojure error. It walks you through the process step by step, from analyzing the error, investigating the cause, coming up with a solution, up to finally reporting the issue on Github. In the process you’ll learn how to interpret stack traces, how to inspect the dependency tree with Leiningen, and how to influence Leiningen’s choice of version in case of a conflict.
Stuart Sierra’s Component is a small library that can have a big impact on the structure and architecture of your application. In this episode you learn how you can use it to create components, and manage dependencies. You will create a Jetty and an Endpoint component, and use the PostgreSQL component from the System project.
Side effects in re-frame are handled through events. You’ll implement several event handlers of a TodoMVC app so it becomes functional. You’ll also implement custom effect and co-effect handlers for storing the application state in localStorage. To debug event handlers you’ll learn about the “debug” interceptor, and about re-frisk, a handy tool for inspecting your re-frame database.
With records, Clojure has introduced a way to create struct-like objects, while avoiding some of the problems encountered in object orientation. Records don’t hide their data behind custom interfaces, but instead partake in the abstractions that Clojure’s own data types are built on, so that code can treat treat a record like a regular Clojure data type.
Protocols are Clojure’s take on abstract interfaces. They make it possible to extend preexisting types to new methods, and extend preexisting methods to new types, thus avoiding the expression problem.
Clojure is built on a well thought out set of abstractions. To implement these, it makes use of the ability to define abstractions in the host language, namely Java interfaces, and the high-performance polymorphism that they provides.
As a Clojure programmer you don’t have to resort to Java to achieve the same thing. All the facilities are there to create interfaces, and to create types that implement interfaces, getting you as close to the JVM as you need to be.
Seqs are a key abstraction in how Clojure processes data, but what exactly is a “seq”, and how does it relate to “seqable?”. Time for a deep dive in Clojure and ClojureScript source code to discover the finer points. Learn exactly what seqs and seqables are, what they do, and how you can use them to your advantage.
Reagent is a popular and easy to use option for using React with ClojureScript. re-frame builds on top of Reagent, providing an elegant and opinionated way to structure applications and deal with application state. The documentation for re-frame can easily overwhelm. With this episode you get a practical hands-on introduction, so you can be making your own apps in no time.
By using Figwheel with CIDER you get both a Clojure and a ClojureScript REPL at the same time, and you get all the nice features of CIDER. It’s a more complex setup than just straight inf-clojure, so before we get there we need to talk a bit about nREPL and Piggieback, tooling you should be familiar with, no matter which editor you are using.
Learn how to integrate Figwheel’s browser connected REPL into Emacs, for an ever greater degree of interactive development, using inf-clojure-mode.
Clojure’s variable argument functions combined with map destructuring results in a concise syntax for keyword arguments. We’ll pick this feature apart to see exactly what’s inside. You’ll learn about “mapply”, and learn why keyword arguments aren’t always the best solution.
To be effective at programming, you have to understand your tools. In this episode we’ll peel a few layers away, and use the ClojureScript compiler without any help from Leiningen, Cljsbuild or Figwheel. You’ll learn about compiler options, levels of optimization, the role of the Google Closure Library, and how to confgure the compiler for development and production use.
React.js is the new hotness in the land of user interfaces. It’s descriptive approach pairs wonderfully with ClojureScript’s functional underpinnings.
This episode will show how to build an app with React, all from comfortable ClojureScript. It provides a solid foundation for diving into React wrappers like Reagent or Om later on, and it’s a welcome exercise in using ClojureScript’s interop features.
We’ll cover: elements, components, the virtual DOM, using an atom to keep application state, and attaching event handlers with component properties.
To give you a starting point for building your own app, we’ll go through the process of building an application from scratch with Luminus. In this first part in a series of three, you’ll learn to set up the database, write migrations to create tables with Migratus, create SQL queries with HugSQL, and tie it all together with Compojure routes and Selmer templates.