From 1542c245bd9ccf56459cf894d8ca1d30509b96a4 Mon Sep 17 00:00:00 2001 From: Dirk Luijk Date: Fri, 23 Aug 2019 00:03:51 +0200 Subject: [PATCH] fix(mock): allow assigning read-only properties --- .../spectator/jest/test/spy-object/spy-object.spec.ts | 10 +++++++++- projects/spectator/src/lib/mock.ts | 3 ++- projects/spectator/test/spy-object/spy-object.spec.ts | 8 ++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/projects/spectator/jest/test/spy-object/spy-object.spec.ts b/projects/spectator/jest/test/spy-object/spy-object.spec.ts index a6304afa..dcfa5002 100644 --- a/projects/spectator/jest/test/spy-object/spy-object.spec.ts +++ b/projects/spectator/jest/test/spy-object/spy-object.spec.ts @@ -9,7 +9,7 @@ describe('SpyObject', () => { person.sayHi.andReturn('Bye!'); }); - it('should keep getters/setters', () => { + it('should enable spying on properties', () => { const person = createSpyObject(Person); person.birthYear = 1990; jest.spyOn(person, 'age', 'get').mockReturnValue(29); @@ -17,6 +17,14 @@ describe('SpyObject', () => { expect(person.age).toBe(29); }); + it('should enable setting properties by just assigning', () => { + const person = createSpyObject(Person); + person.birthYear = 1990; + (person as any).age = 29; + + expect(person.age).toBe(29); + }); + it('should allow setting properties', () => { const person = createSpyObject(Person); diff --git a/projects/spectator/src/lib/mock.ts b/projects/spectator/src/lib/mock.ts index 8965827c..d9aa186f 100644 --- a/projects/spectator/src/lib/mock.ts +++ b/projects/spectator/src/lib/mock.ts @@ -55,7 +55,8 @@ export function installProtoMethods(mock: any, proto: any, createSpyFn: Funct mock[key] = createSpyFn(key); } else if (descriptor.get && !mock.hasOwnProperty(key)) { Object.defineProperty(mock, key, { - get: () => null + set: value => (mock[`_${key}`] = value), + get: () => mock[`_${key}`] }); } } diff --git a/projects/spectator/test/spy-object/spy-object.spec.ts b/projects/spectator/test/spy-object/spy-object.spec.ts index c0e89bad..94b1ed34 100644 --- a/projects/spectator/test/spy-object/spy-object.spec.ts +++ b/projects/spectator/test/spy-object/spy-object.spec.ts @@ -17,6 +17,14 @@ describe('SpyObject', () => { expect(person.age).toBe(29); }); + it('should enable setting properties by just assigning', () => { + const person = createSpyObject(Person); + person.birthYear = 1990; + (person as any).age = 29; + + expect(person.age).toBe(29); + }); + it('should allow setting properties', () => { const person = createSpyObject(Person);