DailyJS

JsHamcrest

Alex R. Young

Subscribe

@dailyjs

Facebook

Google+

libraries

JsHamcrest

Posted by Alex R. Young on .
Featured

libraries

JsHamcrest

Posted by Alex R. Young on .

JsHamcrest is a library for declaratively expressing matching rules based on matcher objects. This
could be used for testing frameworks, mocking libraries, UI validation
rules and object querying.

If you want to run the tests, you need to install
Fabric and minify the library:

git clone git://github.com/danielfm/jshamcrest.git
fab build
fab pack

Then open test/testSuite.html in your browser. It's also
worth building the documentation (get
Sphinx for this to work):

cd doc
make html

Here are a few examples of the library in use (I tried these in Rhino):

js> var odd = JsHamcrest.Matchers.odd()
js> odd.matches(11)
true
js> odd.matches(10)
false

You can also make the matchers globally accessible by copying it into
the current object:

JsHamcrest.Integration.copyMembers(this);

Multiple calls can be chained and then matched like this:

js> JsHamcrest.Integration.copyMembers(this);
js> between(5).and(10).matches(7);
true
js> filter([1, 2, 3, 4], greaterThan(2))
3,4

The library comes with plenty of matchers and also allows you to define
custom matchers. Here is an example of a custom matcher from the
documentation:

var theAnswerToLifeTheUniverseAndEverything = function() {
    return new JsHamcrest.SimpleMatcher({
        matches: function(actual) {
            return actual == 42;
        },

        describeTo: function(description) {
            description.append('the answer to life, the universe, and everything');
        }
    });
};