diff --git a/libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts b/libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts index 10e6f0bcdb..f1779c1d40 100644 --- a/libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts +++ b/libs/ng-mocks/src/lib/mock-builder/promise/init-universe.ts @@ -30,6 +30,8 @@ export default ({ const dependencies = initKeepDef(keepDef, configDef); for (const dependency of mapValues(dependencies)) { + ngMocksUniverse.touches.add(dependency); + // MockBuilder has instruction about the dependency, skipping it. if (configDef.has(dependency)) { continue; @@ -52,7 +54,6 @@ export default ({ dependency: true, __internal: true, }); - ngMocksUniverse.touches.add(dependency); } for (const [k, v] of mapEntries(configDef)) { diff --git a/tests/issue-5520/test.spec.ts b/tests/issue-5520/test.spec.ts new file mode 100644 index 0000000000..3b10d0b194 --- /dev/null +++ b/tests/issue-5520/test.spec.ts @@ -0,0 +1,53 @@ +import { Component, NgModule, VERSION } from '@angular/core'; + +import { MockBuilder, MockRender } from 'ng-mocks'; + +// @see https://github.com/help-me-mom/ng-mocks/issues/5520 +describe('issue-5520', () => { + if (Number.parseInt(VERSION.major, 10) < 15) { + it('needs a15', () => { + // pending('Need Angular 15+'); + expect(true).toBeTruthy(); + }); + + return; + } + + @Component({ + selector: 'dependency', + template: '', + }) + class DependencyComponent { + dependency5520() {} + } + + @NgModule({ + declarations: [DependencyComponent], + exports: [DependencyComponent], + }) + class DependencyModule {} + + @Component( + { + selector: 'standalone', + standalone: true, + template: '', + imports: [DependencyModule], + } as never /* TODO: remove after upgrade to a15 */, + ) + class StandaloneComponent { + standalone5520() {} + } + + beforeEach(() => + MockBuilder(StandaloneComponent, null) + .keep(DependencyModule) + .mock(DependencyComponent), + ); + // Error: MockBuilder has found a missing dependency: DependencyModule. It means no module provides it. + // Please, use the "export" flag if you want to add it explicitly. https://ng-mocks.sudo.eu/api/MockBuilder#export-flag + + it('creates StandaloneComponent', () => { + expect(() => MockRender(StandaloneComponent)).not.toThrow(); + }); +});