- async/await の仕様は 2.0 ではまだ利用できませんでしたが、コールバック形式の非同期仕様よりも適切な選択肢です。Jasmine 1.x の非同期仕様を直接 async/await に変換することも簡単です。
- カスタムマッチャのインターフェースは 4.0 で変更されました。変更内容の詳細については4.0 移行ガイドを参照するか、詳細については現在のカスタムマッチャドキュメントを参照してください。
- 今後のメジャーリリースでのほとんどの重大な変更は、1.x にはまだ存在していない API に関連します。直接最新のバージョンにアップグレードすることで、これらの変更を完全にスキップできます。
このアップグレードガイドの残りの部分は、2.0 リリース時の内容がほぼそのまま保持されています。
jasmine 2.0 のリリースでは、多くのことが変更されました |
describe("Upgrading to jasmine 2.0", function() {
|
カスタムマッチャ |
describe("Custom Matchers", function() {
beforeEach(function() {
|
|
/* was:
this.addMatchers({
*/
jasmine.addMatchers({
|
マッチャは少し異なる方法で設定されます。ファクトリは、jasmine の等価関数や登録されている |
/* was:
toBeCustom: function(expected) {
var passed = this.actual == expected;
*/
toBeCustom: function(util, customEqualityTesters) {
return {
compare: function(actual, expected) {
var passed = actual == expected
|
比較は カスタムマッチャの使用の詳細については、こちらをご覧ください。このページは、1.x を 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
};
}
};
}
});
});
|
カスタムマッチャの使用法は変わりません |
it("uses custom matchers", function() {
expect(1).toBeCustom(1);
});
});
|
非同期仕様 |
describe("Asynchronous Specs", function() {
|
以下のテストでは非同期とみなされます |
var asyncSetThing,
somethingAsyncWithCallback = function(callback) {
asyncSetThing = true;
callback();
};
|
|
/* was:
it("calls an async thing and waits", function() {
var asyncDone = false;
somethingAsyncWithCallback(function() {
asyncDone = true
});
|
以前は仕様自体で非同期状態を追跡する必要がありました。 |
waitsFor(function() {
return asyncDone;
});
*/
|
|
beforeEach(function(done) {
somethingAsyncWithCallback(done);
});
/*
runs(function() {
expect(asyncSetThing).toBeTruthy();
});
});
*/
it("will wait until async completes and calls done", function() {
expect(asyncSetThing).toBeTruthy();
});
});
|
スパイ |
describe("Spies", function() {
it('should spy', function() {
var spy = jasmine.createSpy('spy');
|
スパイに動作方法を指示する方法はすべて、スパイの属性ではなくなりました。スパイの動作がすべて記載されている単一の |
/* 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);
|
基本的な設定とチェックは変わりません |
spy('foo');
spy('bar');
expect(spy).toHaveBeenCalledWith('foo');
|
同様に、より高度なコールチェックは |
/* 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);
});
});
|
クロック |
describe("Clock", function() {
|
jasmineモッククロックはグローバルではなくインスタンス化されたオブジェクトで、 |
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はアドオンから動的的に |
afterEach(function() {
jasmine.clock().uninstall();
});
});
});
|