A huge library of test assertion matchers for a range of common use-cases, to improve the readability of tests written using the Jasmine testing framework from Pivotal Labs.
- Make failing tests easier to debug by avoiding vague messages such as "expected false to be true" in favour of useful cues such as "expected 3 to be even number".
- Make tests easier to read by avoiding implementation noise such as
expect(cycleWheels % 2 === 0).toEqual(true)in favour of simply stating that youexpect(cycleWheels).toBeEvenNumber().
| Platform | Instructions |
|---|---|
| npm | npm install jasmine-expect --save-dev |
| Bower | bower install jasmine-expect --save-dev |
| Manual | Downloads are available on the releases page. |
The Jasmine testing framework from Pivotal Labs comes with this default set of matchers;
expect(array).toContain(member);
expect(fn).toThrow(string);
expect(fn).toThrowError(string);
expect(instance).toBe(instance);
expect(mixed).toBeDefined();
expect(mixed).toBeFalsy();
expect(mixed).toBeNull();
expect(mixed).toBeTruthy();
expect(mixed).toBeUndefined();
expect(mixed).toEqual(mixed);
expect(mixed).toMatch(pattern);
expect(number).toBeCloseTo(number, decimalPlaces);
expect(number).toBeGreaterThan(number);
expect(number).toBeLessThan(number);
expect(number).toBeNaN();
expect(spy).toHaveBeenCalled();
expect(spy).toHaveBeenCalledTimes(number);
expect(spy).toHaveBeenCalledWith(...arguments);| Matcher | Example |
|---|---|
| toBeArray | expect(array).toBeArray(); |
| toBeArrayOfBooleans | expect(array).toBeArrayOfBooleans(); |
| toBeArrayOfNumbers | expect(array).toBeArrayOfNumbers(); |
| toBeArrayOfObjects | expect(array).toBeArrayOfObjects(); |
| toBeArrayOfSize | expect(array).toBeArrayOfSize(number); |
| toBeArrayOfStrings | expect(array).toBeArrayOfStrings(); |
| toBeEmptyArray | expect(array).toBeEmptyArray(); |
| toBeNonEmptyArray | expect(array).toBeNonEmptyArray(); |
| Matcher | Example |
|---|---|
| toBeBoolean | expect(boolean).toBeBoolean(); |
| toBeFalse | expect(boolean).toBeFalse(); |
| toBeTrue | expect(boolean).toBeTrue(); |
| Matcher | Example |
|---|---|
| toBeAfter | expect(date).toBeAfter(date); |
| toBeBefore | expect(date).toBeBefore(date); |
| toBeDate | expect(date).toBeDate(); |
| Matcher | Example |
|---|---|
| toBeFunction | expect(fn).toBeFunction(); |
| toThrowAnyError | expect(fn).toThrowAnyError(); |
| toThrowErrorOfType | expect(fn).toThrowErrorOfType(constructorName); |
| Matcher | Example |
|---|---|
| toBeCalculable | expect(mixed).toBeCalculable(); |
| toBeEvenNumber | expect(number).toBeEvenNumber(); |
| toBeGreaterThanOrEqualTo | expect(number).toBeGreaterThanOrEqualTo(number); |
| toBeLessThanOrEqualTo | expect(number).toBeLessThanOrEqualTo(number); |
| toBeNumber | expect(number).toBeNumber(); |
| toBeOddNumber | expect(number).toBeOddNumber(); |
| toBeWholeNumber | expect(number).toBeWholeNumber(); |
| toBeWithinRange | expect(number).toBeWithinRange(floor, ceiling); |
| Matcher | Example |
|---|---|
| toBeEmptyString | expect(string).toBeEmptyString(); |
| toBeHtmlString | expect(string).toBeHtmlString(); |
| toBeIso8601 | expect(string).toBeIso8601(); |
| toBeJsonString | expect(string).toBeJsonString(); |
| toBeLongerThan | expect(string).toBeLongerThan(); |
| toBeNonEmptyString | expect(string).toBeNonEmptyString(); |
| toBeSameLengthAs | expect(string).toBeSameLengthAs(); |
| toBeShorterThan | expect(string).toBeShorterThan(); |
| toBeString | expect(string).toBeString(); |
| toBeWhitespace | expect(string).toBeWhitespace(); |
| toEndWith | expect(string).toEndWith(string); |
| toStartWith | expect(string).toStartWith(string); |
| Matcher | Example |
|---|---|
| toBeEmptyObject | expect(object).toBeEmptyObject(); |
| toBeNonEmptyObject | expect(object).toBeNonEmptyObject(); |
| toBeObject | expect(object).toBeObject(); |
| Matcher | Example |
|---|---|
| toHaveArray | expect(object).toHaveArray(memberName); |
| toHaveArrayOfBooleans | expect(object).toHaveArrayOfBooleans(memberName); |
| toHaveArrayOfNumbers | expect(object).toHaveArrayOfNumbers(memberName); |
| toHaveArrayOfObjects | expect(object).toHaveArrayOfObjects(memberName); |
| toHaveArrayOfSize | expect(object).toHaveArrayOfSize(memberName, size); |
| toHaveArrayOfStrings | expect(object).toHaveArrayOfStrings(memberName); |
| toHaveBoolean | expect(object).toHaveBoolean(memberName); |
| toHaveCalculable | expect(object).toHaveCalculable(memberName); |
| toHaveDate | expect(object).toHaveDate(memberName); |
| toHaveDateAfter | expect(object).toHaveDateAfter(memberName, date); |
| toHaveDateBefore | expect(object).toHaveDateBefore(memberName, date); |
| toHaveEmptyArray | expect(object).toHaveEmptyArray(memberName); |
| toHaveEmptyObject | expect(object).toHaveEmptyObject(memberName); |
| toHaveEmptyString | expect(object).toHaveEmptyString(memberName); |
| toHaveEvenNumber | expect(object).toHaveEvenNumber(memberName); |
| toHaveFalse | expect(object).toHaveFalse(memberName); |
| toHaveHtmlString | expect(object).toHaveHtmlString(memberName); |
| toHaveIso8601 | expect(object).toHaveIso8601(memberName); |
| toHaveJsonString | expect(object).toHaveJsonString(memberName); |
| toHaveMember | expect(object).toHaveMember(memberName); |
| toHaveMethod | expect(object).toHaveMethod(memberName); |
| toHaveNonEmptyArray | expect(object).toHaveNonEmptyArray(memberName); |
| toHaveNonEmptyObject | expect(object).toHaveNonEmptyObject(memberName); |
| toHaveNonEmptyString | expect(object).toHaveNonEmptyString(memberName); |
| toHaveNumber | expect(object).toHaveNumber(memberName); |
| toHaveNumberWithinRange | expect(object).toHaveNumberWithinRange(memberName, floor, ceiling); |
| toHaveObject | expect(object).toHaveObject(memberName); |
| toHaveOddNumber | expect(object).toHaveOddNumber(memberName); |
| toHaveString | expect(object).toHaveString(memberName); |
| toHaveStringLongerThan | expect(object).toHaveStringLongerThan(memberName, string); |
| toHaveStringSameLengthAs | expect(object).toHaveStringSameLengthAs(memberName, string); |
| toHaveStringShorterThan | expect(object).toHaveStringShorterThan(memberName, string); |
| toHaveTrue | expect(object).toHaveTrue(memberName); |
| toHaveWhitespaceString | expect(object).toHaveWhitespaceString(memberName); |
| toHaveWholeNumber | expect(object).toHaveWholeNumber(memberName); |
The Jasmine testing framework from Pivotal Labs comes with this default set of asymmetric matchers;
jasmine.any(Constructor);
jasmine.anything(mixed);
jasmine.arrayContaining(mixed);
jasmine.objectContaining(mixed);
jasmine.stringMatching(pattern);| Matcher | Example |
|---|---|
| any.arrayOfBooleans | expect(spy).toHaveBeenCalledWith(any.arrayOfBooleans()); |
| any.arrayOfNumbers | expect(spy).toHaveBeenCalledWith(any.arrayOfNumbers()); |
| any.arrayOfObjects | expect(spy).toHaveBeenCalledWith(any.arrayOfObjects()); |
| any.arrayOfSize | expect(spy).toHaveBeenCalledWith(any.arrayOfSize(number)); |
| any.arrayOfStrings | expect(spy).toHaveBeenCalledWith(any.arrayOfStrings()); |
| any.emptyArray | expect(spy).toHaveBeenCalledWith(any.emptyArray()); |
| any.nonEmptyArray | expect(spy).toHaveBeenCalledWith(any.nonEmptyArray()); |
| Matcher | Example |
|---|---|
| any.after | expect(spy).toHaveBeenCalledWith(any.after(date)); |
| any.before | expect(spy).toHaveBeenCalledWith(any.before(date)); |
| Matcher | Example |
|---|---|
| any.calculable | expect(spy).toHaveBeenCalledWith(any.calculable()); |
| any.evenNumber | expect(spy).toHaveBeenCalledWith(any.evenNumber()); |
| any.greaterThanOrEqualTo | expect(spy).toHaveBeenCalledWith(any.greaterThanOrEqualTo(number)); |
| any.lessThanOrEqualTo | expect(spy).toHaveBeenCalledWith(any.lessThanOrEqualTo(number)); |
| any.oddNumber | expect(spy).toHaveBeenCalledWith(any.oddNumber()); |
| any.wholeNumber | expect(spy).toHaveBeenCalledWith(any.wholeNumber()); |
| any.withinRange | expect(spy).toHaveBeenCalledWith(any.withinRange(floor, ceiling)); |
| Matcher | Example |
|---|---|
| any.endingWith | expect(spy).toHaveBeenCalledWith(any.endingWith(string)); |
| any.iso8601 | expect(spy).toHaveBeenCalledWith(any.iso8601()); |
| any.jsonString | expect(spy).toHaveBeenCalledWith(any.jsonString()); |
| any.longerThan | expect(spy).toHaveBeenCalledWith(any.longerThan(string)); |
| any.nonEmptyString | expect(spy).toHaveBeenCalledWith(any.nonEmptyString()); |
| any.sameLengthAs | expect(spy).toHaveBeenCalledWith(any.sameLengthAs(string)); |
| any.shorterThan | expect(spy).toHaveBeenCalledWith(any.shorterThan(string)); |
| any.startingWith | expect(spy).toHaveBeenCalledWith(any.startingWith(string)); |
| any.whitespace | expect(spy).toHaveBeenCalledWith(any.whitespace()); |
| Matcher | Example |
|---|---|
| any.emptyObject | expect(spy).toHaveBeenCalledWith(any.emptyObject()); |
| any.nonEmptyObject | expect(spy).toHaveBeenCalledWith(any.nonEmptyObject()); |
Embed jasmine-matchers.js after Jasmine but before your tests.
Include the following in your package.json;
"unmockedModulePathPatterns": ["jasmine-expect"]And the following at the top of your test suite;
import JasmineExpect from 'jasmine-expect';Integration is easy with the karma-jasmine-matchers plugin.
Use the Jasmine CLI and include the path to where Jasmine Matchers is installed in the helpers array of your spec/support/jasmine.json.
{
"spec_dir": "spec",
"spec_files": ["../src/**/*.spec.js"],
"helpers": ["../node_modules/jasmine-expect/index.js"],
"stopSpecOnExpectationFailure": false,
"random": false
}Jasmine-Matchers-Snippets or Jasmine-Matchers-ES6-Snippets can be installed with Package Control to ease development with Jasmine Matchers in Sublime Text.
There is a Plugin for Tern to auto-complete matchers in your Text Editor.
Jasmine-Matchers is tested on Travis CI and BrowserStack against the following environments.
| Browser | Version Range |
|---|---|
| Android | 4.0 - 5.1 |
| Chrome | 26 - 52 |
| Firefox | 4 - 48 |
| Internet Explorer | 9 - Edge |
| iOS | 6.0 - 9.3* |
| Opera | 11 - 12 |
| Safari | 6 - 9* |
* Safari 5.1 and iOS 5.1 are actually fully supported except for toBeIso8601.