A matcher is a function that returns an object with a compare
key. Usually it is registered with beforeEach
:
beforeEach(() => {
jasmine.addMatchers({
// Example matcher
toBeAnything() {
return {
compare(actualValue, ...matcherArguments) {
// Do some computations here ...
// Return whether the actualValue matches the expectation
return {pass: true}
}
}
}
})
})
expect(actualValue).toBeAnything(...matcherArguments)
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 archive.org snapshot
, e.g. setting a helpful failure message.
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 archive.org 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.