| custom_matcher.js | |
|---|---|
| Often a project will want to encapsulate custom matching code for use across multiple specs. Here is how to create a Jasmine-compatible custom matcher. A custom matcher at its root is a comparison function that takes an  |  | 
| This object has a custom matcher named "toBeGoofy". | var customMatchers = { | 
| Matcher FactoriesCustom matcher factories are passed two parameters:  |   toBeGoofy: function(util, customEqualityTesters) { | 
| The factory method should return an object with a  |     return { | 
| A Function to  |       compare: function(actual, expected) { | 
| 
 |         if (expected === undefined) {
        expected = '';
      } | 
| ResultThe  |         var result = {}; | 
| 
 |         result.pass = util.equals(actual.hyuk, "gawrsh" + expected, customEqualityTesters); | 
| Failure MessagesIf left  |         if (result.pass) { | 
| The matcher succeeded, so the custom failure message should be present in the case of a negative expectation - when the expectation is used with  |           result.message = "Expected " + actual + " not to be quite so goofy";
      } else { | 
| The matcher failed, so the custom failure message should be present in the case of a positive expectation |           result.message = "Expected " + actual + " to be goofy, but it was not very goofy";
      } | 
| Return the result of the comparison. |         return result;
    }
  };
}
}; | 
| Custom negative comparatorsIf you need more control over the negative comparison (the  |  | 
| Registration and Usage | describe("Custom matcher: 'toBeGoofy'", function() { | 
| Register the custom matchers with Jasmine. All properties on the object passed in will be available as custom matchers (e.g., in this case  |   beforeEach(function() {
  jasmine.addMatchers(customMatchers);
}); | 
| Once a custom matcher is registered with Jasmine, it is available on any expectation. |   it("is available on an expectation", function() {
  expect({
    hyuk: 'gawrsh'
  }).toBeGoofy();
});
it("can take an 'expected' parameter", function() {
  expect({
    hyuk: 'gawrsh is fun'
  }).toBeGoofy(' is fun');
});
it("can be negated", function() {
  expect({
    hyuk: 'this is fun'
  }).not.toBeGoofy();
});
}); |