- 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({
|
现在设置一个匹配程序有所不同。工厂接收一个 |
/* 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();
});
});
});
|