upgrading.js |
|
---|---|
A number of things have changed with the release of jasmine 2.0 |
describe("Upgrading to jasmine 2.0", function() {
|
Custom Matchers |
describe("Custom Matchers", function() {
beforeEach(function() {
|
The |
/* was:
this.addMatchers({
*/
jasmine.addMatchers({
|
A matcher is set up a bit different now.
The factory receives a |
/* was:
toBeCustom: function(expected) {
var passed = this.actual == expected;
*/
toBeCustom: function(util, customEqualityTesters) {
return {
compare: function(actual, expected) {
var passed = actual == expected
|
The comparison should now return an object with For more information on the use of custom matchers. This page is intended to show the changes necessary to upgrade a 1.x suite to 2.0 |
/* was:
this.message = function() {
return [
'Expected ' + this.actual + ' to equal ' + expected,
'Expected ' + this.actual + ' not to equal ' + expected
];
};
return passed;
});
*/
return {
pass: passed,
message: 'Expected ' + actual + (passed ? '' : ' not') + ' to equal ' + expected
};
}
};
}
});
});
|
Use of custom matchers remains the same |
it("uses custom matchers", function() {
expect(1).toBeCustom(1);
});
});
|
Asynchronous Specs |
describe("Asynchronous Specs", function() {
|
We’ll pretend this is asynchronous for our tests below |
var asyncSetThing,
somethingAsyncWithCallback = function(callback) {
asyncSetThing = true;
callback();
};
|
The |
/* was:
it("calls an async thing and waits", function() {
var asyncDone = false;
somethingAsyncWithCallback(function() {
asyncDone = true
});
|
While it used to be necessary to keep track of the async state in the spec itself. |
waitsFor(function() {
return asyncDone;
});
*/
|
By having a |
beforeEach(function(done) {
somethingAsyncWithCallback(done);
});
/*
runs(function() {
expect(asyncSetThing).toBeTruthy();
});
});
*/
it("will wait until async completes and calls done", function() {
expect(asyncSetThing).toBeTruthy();
});
});
|
Spies |
describe("Spies", function() {
it('should spy', function() {
var spy = jasmine.createSpy('spy');
|
All the ways to tell the spy how to behave are no longer their own attribute directly on the spy.
There is a single |
/* was:
spy.andCallThrough();
spy.andCallFake(function() {});
spy.andThrow('error');
spy.andReturn(1);
*/
spy.and.callThrough();
spy.and.callFake(function() {});
spy.and.throwError('error');
spy.and.returnValue(1);
|
Basic setup and check remains the same |
spy('foo');
spy('bar');
expect(spy).toHaveBeenCalledWith('foo');
expect(spy).toHaveBeenCalledWith('bar');
|
Similarly to behaviors, more advanced call checks are on the |
/* was:
expect(spy.mostRecentCall.args).toEqual(['bar']);
expect(spy.callCount).toBe(2);
*/
expect(spy.calls.mostRecent().args).toEqual(['bar']);
expect(spy.calls.count()).toBe(2);
});
});
|
Clock |
describe("Clock", function() {
|
The jasmine mock clock is now an instanciated object and not a global,
and it is now |
beforeEach(function() {
/* was:
jasmine.Clock.useMock();
*/
jasmine.clock().install();
});
|
|
it("uses the clock similarly", function() {
/* was:
jasmine.Clock.tick();
*/
jasmine.clock().tick();
});
|
Jasmine 2.0 removes the ability for addons to dynamically add |
afterEach(function() {
jasmine.clock().uninstall();
});
});
});
|