If at any point you think of an experiment you'd like to try out, all of the code examples below are editable.

assert is a power-user method that exposes how Distilled tells whether a given test assertion should pass or fail. assert can be used to check whether a test will pass or fail before it's run.

If you're extending Distilled, you can even override the assert method to easily add your own custom behaviors.

While you probably won't interact with assert directly most of the time you're using Distilled, this section may still be helpful in showing exactly when a Distilled test will pass or fail.

assert uses basic value types to tell if an assertion should pass or fail. Truthy values pass, and falsy (non-null) values fail.

One of assert's most powerful features is its ability to recursively execute functions. This means that if assert is passed a function, it will asynchronously execute that function. Then it will treat the result like a new assertion.

If the result is a basic type (see above), assert will resolve. If it's another function, the whole process will be repeated. To maintain compatibility with most other assertion libraries, assert will reject if an exception is thrown during a function call.

Recursively resolving assertions are a feature that may seem gimmicky until you start to extend Distilled and create helper methods for your tests. In that situation, you'll quickly find that being able to quickly and seamlessly wrap assertions in custom logic makes your life a lot easier -- and reduces boilerplate!

Distilled is an async-first library. All assertions are resolved asynchronously, period. This means you can use Promises the exact same way as you use functions to nest assertions inside of each other.

Put it all together, and you can end up with some pretty crazy tests. Note that you probably don't want to write tests like this -- they're hard to read!

The point of recursively resolving tests is to allow you to eliminate boilerplate and hard to read logic from your tests, so the below code is just an example of what's possible.

As a convenience feature, assertions will time out and fail after 500 milliseconds. This behavior can be customized by passing in a timeout option when initializing Distilled.


Code samples in this section demonstrate bug fixes. They're not particularly relevant to the documentation, but they help make sure that Distilled never has any regressions.