Read more

Jasmine: Adding custom matchers

Dominik Schöler
May 02, 2018Software engineer at makandra GmbH


A matcher is a function that returns an object with a compare key. Usually it is registered with beforeEach:

beforeEach(() => {
    // Example matcher
    toBeAnything() {
      return {
        compare(actualValue, ...matcherArguments) {
           // Do some computations here ...
           // Return whether the actualValue matches the expectation
           return {pass: true}


Illustration online protection

Rails Long Term Support

Rails LTS provides security patches for old versions of Ruby on Rails (2.3, 3.2, 4.2 and 5.2)

  • Prevents you from data breaches and liability risks
  • Upgrade at your own pace
  • Works with modern Rubies
Read more Show snapshot

When a matcher is invoked, Jasmine will call its compare() function with the actualValue, followed by any arguments passed to the matcher. It should process them to determine whether the expectation is fulfilled, and return an object with a pass: true/false pair.

As you can see in the linked article, the object returned by compare() supports a few more options Show snapshot , e.g. setting a helpful failure message.

Definition location

I suggest putting generic matchers into spec/javascripts/support/matchers/, and specific matchers into the file where they're needed.

Note: There are collections of Jasmine matchers Show snapshot you could reuse. As always, avoid including huge libraries when you're only using a single feature of them. You might just copy the matchers you need over to your project.

Posted by Dominik Schöler to makandra dev (2018-05-02 12:19)