From 6f6255d9e836ad1fb0d1ae1febc5d8ba3a20a87c Mon Sep 17 00:00:00 2001 From: Yakov Tchenak Date: Sat, 1 Feb 2025 18:19:29 +0200 Subject: [PATCH] fix: support signal model output --- .../src/lib/common/func.directive-io-parse.ts | 4 ++ tests/issue-10942/test.spec.ts | 46 +++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/issue-10942/test.spec.ts diff --git a/libs/ng-mocks/src/lib/common/func.directive-io-parse.ts b/libs/ng-mocks/src/lib/common/func.directive-io-parse.ts index d818160139..e2a8c59c61 100644 --- a/libs/ng-mocks/src/lib/common/func.directive-io-parse.ts +++ b/libs/ng-mocks/src/lib/common/func.directive-io-parse.ts @@ -8,6 +8,10 @@ export default function (param: DirectiveIo): DirectiveIoParsed { return { name }; } + if (name + 'Change' === alias) { + return { name: alias }; // model output + } + return { name, alias }; } diff --git a/tests/issue-10942/test.spec.ts b/tests/issue-10942/test.spec.ts new file mode 100644 index 0000000000..006fc42cf3 --- /dev/null +++ b/tests/issue-10942/test.spec.ts @@ -0,0 +1,46 @@ +import { + Component, + model, + NO_ERRORS_SCHEMA, + signal, +} from '@angular/core'; +import { TestBed } from '@angular/core/testing'; + +import { MockBuilder, ngMocks } from 'ng-mocks'; + +@Component({ + selector: 'app-signal', + ['standalone' as never /* TODO: remove after upgrade to a14 */]: + true, + template: ``, +}) +export class SignalComponent { + model = model(''); +} +@Component({ + imports: [SignalComponent], + ['standalone' as never /* TODO: remove after upgrade to a14 */]: + true, + schemas: [NO_ERRORS_SCHEMA], // TODO: remove after upgrade to a16 + template: ` +

{{ title() }}

+ + `, +}) +export class TargetComponent { + title = signal('test-default'); +} + +describe('issue-10942', () => { + beforeEach(() => MockBuilder(TargetComponent)); + + it('issue-10942', () => { + const fixture = TestBed.createComponent(TargetComponent); + fixture.detectChanges(); + ngMocks.output('app-signal', 'modelChange').emit('test-new'); + fixture.detectChanges(); + expect(ngMocks.find('h1').nativeElement.innerHTML).toEqual( + 'test-new', + ); + }); +});