Skip to content

Commit d59e4f2

Browse files
authored
fix: flatten component providers for consistency to the framework (#507)
Closes #506
1 parent fdcf5fa commit d59e4f2

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

projects/testing-library/src/lib/testing-library.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ export async function render<SutType, WrapperType = SutType>(
119119

120120
await TestBed.compileComponents();
121121

122-
for (const { provide, ...provider } of componentProviders) {
122+
// Angular supports nested arrays of providers, so we need to flatten them to emulate the same behavior.
123+
for (const { provide, ...provider } of componentProviders.flat(Infinity)) {
123124
TestBed.overrideProvider(provide, provider);
124125
}
125126

projects/testing-library/tests/providers/component-provider.spec.ts

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Injectable } from '@angular/core';
1+
import { Injectable, Provider } from '@angular/core';
22
import { Component } from '@angular/core';
33
import { render, screen } from '../../src/public_api';
44

@@ -42,6 +42,24 @@ test('shows the provided service value with template syntax', async () => {
4242
expect(screen.getByText('bar')).toBeInTheDocument();
4343
});
4444

45+
test('flatten the nested array of component providers', async () => {
46+
const provideService = (): Provider => [
47+
{
48+
provide: Service,
49+
useValue: {
50+
foo() {
51+
return 'bar';
52+
},
53+
},
54+
},
55+
];
56+
await render(FixtureComponent, {
57+
componentProviders: [provideService()],
58+
});
59+
60+
expect(screen.getByText('bar')).toBeInTheDocument();
61+
});
62+
4563
@Injectable()
4664
class Service {
4765
foo() {

0 commit comments

Comments
 (0)