From cb2e646332c4a7352776e87ecba9b003001b50ae Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Tue, 14 Apr 2015 13:26:42 -0700 Subject: [PATCH] fix(tests): create default spys for all methods on a class --- modules/angular2/src/test_lib/test_lib.es6 | 12 ++++++++++ .../angular2/test/test_lib/test_lib_spec.js | 22 +++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/modules/angular2/src/test_lib/test_lib.es6 b/modules/angular2/src/test_lib/test_lib.es6 index 3447548409..b3227fc2c4 100644 --- a/modules/angular2/src/test_lib/test_lib.es6 +++ b/modules/angular2/src/test_lib/test_lib.es6 @@ -272,6 +272,16 @@ _global.beforeEach(function() { }); export class SpyObject { + constructor(type = null) { + if (type) { + for (var prop in type.prototype) { + var m = type.prototype[prop]; + if (typeof m === 'function') { + this.spy(prop); + } + } + } + } spy(name){ if (! this[name]) { this[name] = this._createGuinnessCompatibleSpy(); @@ -286,6 +296,8 @@ export class SpyObject { _createGuinnessCompatibleSpy(){ var newSpy = jasmine.createSpy(); newSpy.andCallFake = newSpy.and.callFake; + // return null by default to satisfy our rtts asserts + newSpy.and.returnValue(null); return newSpy; } } diff --git a/modules/angular2/test/test_lib/test_lib_spec.js b/modules/angular2/test/test_lib/test_lib_spec.js index 93d7feb301..9dfc8992d7 100644 --- a/modules/angular2/test/test_lib/test_lib_spec.js +++ b/modules/angular2/test/test_lib/test_lib_spec.js @@ -7,11 +7,17 @@ class TestObj { constructor(prop) { this.prop = prop; } + someFunc():number { + return -1; + } } @proxy @IMPLEMENTS(TestObj) -class SpyTestObj extends SpyObject {noSuchMethod(m){return super.noSuchMethod(m)}} +class SpyTestObj extends SpyObject { + constructor(){super(TestObj);} + noSuchMethod(m){return super.noSuchMethod(m)} +} export function main() { describe('test_lib', () => { @@ -66,11 +72,23 @@ export function main() { }); it("should record function calls", () => { - spyObj.spy("someFunc").andCallFake((a,b) => a + b); + spyObj.spy("someFunc").andCallFake((a,b) => { + return a + b + }); expect(spyObj.someFunc(1,2)).toEqual(3); expect(spyObj.spy("someFunc")).toHaveBeenCalledWith(1,2); }); + + it('should create spys for all methods', () => { + expect(spyObj.someFunc).toBeTruthy(); + }); + + it('should create a default spy that does not fail for numbers', () => { + // Need to return null instead of undefined so that rtts assert does + // not fail... + expect(spyObj.someFunc()).toBe(null); + }); }); }); }