Kape
Kape is a testing framework focused on Developer Experience first. It does this by prioritizing the following concepts as first class citizens:
- Snapshot Testing
- Data Driven Testing
- Behavior Driven Development
- CLI UX
- Promises
Inception
As a developer that loves the most minimal setup possible with the smallest footprint, I've always been tied to Tape as a testing framework. Over time, Tape was not able to fulfill the needs I had of a testing framework. I really enjoy Behavior Driven Development terminology so to enable that I added in Tape BDD. Following that I really wanted Snapshot Testing as made popular by Jest. While I thought that would be a simple thing to add... it wasn't. While trying snapshot testing, I also really needed promise support and I needed to add Blue Tape. At that moment I realized I needed something to do all of the above.
On top of that growing stack just for testing, I am also a REALLY lazy developer... most of the time I just want to know that a function's output does not change as long as I maintain the same input. I wanted a Snapshot Testing First strategy, that was just not easy to do in any framework. I tried getting Jest to work, but ultimately I got stuck in configuration hell due to the Alle monorepo setup. So instead I decided to write my own framework where all you needed to provide was a set of inputs and the framework would snapshot the output of the function under test by default and always check against the snapshot. And with that Kape was born.
Usage
The simplest way to use Kape is below:
import describe from 'kape'
import funcUnderTest from './some-function'
describe('Name of Function', funcUnderTest, snapshot =>
snapshot([], [arg1], [arg1, arg2])
)
The above will run 3 tests. It will run each argument of snapshot
as a set of
arguments for the given funcUnderTest
, after running that it will snapshot the
result and save it. If a snapshot already exists, it will validate against the
old snapshot, and then ask for verification if any changes are present. Simple
as that.