This makes it easier to write high quality matchers and asymmetric equality
testers, and is also a step toward supporting custom object formatters.
Previously, Jasmine passed custom object formatters as the second argument
to matcher factories and as and the second argument to asymmetric equality
testers' `asymmetricMatch` method. Matchers and asymmetric equality testers
were responsible for passing the custom object formatters to methods like
`matchersUtil#equals`:
function toEqual(util, customEqualityTesters) {
return {
compare: function(actual, expected) {
// ...
result.pass = util.equals(actual, expected, customEqualityTesters, diffBuilder);
And:
ArrayContaining.prototype.asymmetricMatch = function(other, customTesters) {
// ...
for (var i = 0; i < this.sample.length; i++) {
var item = this.sample[i];
if (!j$.matchersUtil.contains(other, item, customTesters)) {
return false;
}
}
With this change, that is no longer necessary. Matchers and asymmetric
equality testers can ignore the existence of custom equality testers and
still fully support them:
function toEqual(util) {
return {
compare: function(actual, expected) {
// ...
result.pass = util.equals(actual, expected, diffBuilder);
And:
ArrayContaining.prototype.asymmetricMatch = function(other, matchersUtil) {
// ...
for (var i = 0; i < this.sample.length; i++) {
var item = this.sample[i];
if (!matchersUtil.contains(other, item)) {
return false;
}
}
The old interfaces are still supported, for now, but will be deprecated
in a future commit and removed in the next major release after that.
In addition to making matchers and custom equality testers simpler,
this change sets the stage for adding support for custom object
formatters. Those will be architecturally similar to custom equality
testers, and by injecting a `MatchersUtil` instance everywhere we can
add them without requiring user code to pass them around as used to be
the case with custom object formatters.
A JavaScript Testing Framework
Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, Node.js projects, or anywhere that JavaScript can run.
Documentation & guides live here: http://jasmine.github.io For a quick start guide of Jasmine, see the beginning of http://jasmine.github.io/edge/introduction.html
Upgrading from Jasmine 2.x? Check out the 3.0 release notes for a list of what's new (including breaking changes).
Contributing
Please read the contributors' guide
Installation
For the Jasmine NPM module:
https://github.com/jasmine/jasmine-npm
For the Jasmine Ruby Gem:
https://github.com/jasmine/jasmine-gem
For the Jasmine Python Egg:
https://github.com/jasmine/jasmine-py
For the Jasmine headless browser gulp plugin:
https://github.com/jasmine/gulp-jasmine-browser
To install Jasmine standalone on your local box (where {#.#.#} below is substituted by the release number downloaded):
- Download the standalone distribution for your desired release from the releases page
- Create a Jasmine directory in your project -
mkdir my-project/jasmine - Move the dist to your project directory -
mv jasmine/dist/jasmine-standalone-{#.#.#}.zip my-project/jasmine - Change directory -
cd my-project/jasmine - Unzip the dist -
unzip jasmine-standalone-{#.#.#}.zip
Add the following to your HTML file:
<link rel="shortcut icon" type="image/png" href="jasmine/lib/jasmine-{#.#.#}/jasmine_favicon.png">
<link rel="stylesheet" type="text/css" href="jasmine/lib/jasmine-{#.#.#}/jasmine.css">
<script type="text/javascript" src="jasmine/lib/jasmine-{#.#.#}/jasmine.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-{#.#.#}/jasmine-html.js"></script>
<script type="text/javascript" src="jasmine/lib/jasmine-{#.#.#}/boot.js"></script>
Supported environments
Jasmine tests itself across many browsers (Safari, Chrome, Firefox, Microsoft Edge, and new Internet Explorer) as well as nodejs. To see the exact version tests are run against look at our .travis.yml
Support
- Search past discussions: http://groups.google.com/group/jasmine-js
- Send an email to the list: jasmine-js@googlegroups.com
- View the project backlog at Pivotal Tracker: http://www.pivotaltracker.com/projects/10606
- Follow us on Twitter: @JasmineBDD
Maintainers
- Gregg Van Hove, Pivotal Labs
Maintainers Emeritus
- Davis W. Frank, Pivotal Labs
- Rajan Agaskar, Pivotal Labs
- Greg Cobb, Pivotal Labs
- Chris Amavisca, Pivotal Labs
- Christian Williams, Cloud Foundry
- Sheel Choksi
Copyright (c) 2008-2018 Pivotal Labs. This software is licensed under the MIT License.