fix(ivy): TestBed should tolerate synchronous use of compileComponents
(#28350)
TestBed.compileComponents has always been an async API. However, ViewEngine tolerated using this API in a synchronous manner if the components declared in the testing module did not have any async resources (templateUrl, styleUrls). This change makes the ivy TestBed mirror this tolerance by configuring such components synchronously. Ref: FW-992 PR Close #28350
This commit is contained in:

committed by
Jason Aden

parent
f8c70011b1
commit
3deda898d0
@ -79,6 +79,10 @@ export class ComponentWithPropBindings {
|
||||
export class SimpleApp {
|
||||
}
|
||||
|
||||
@Component({selector: 'inline-template', template: '<p>Hello</p>'})
|
||||
export class ComponentWithInlineTemplate {
|
||||
}
|
||||
|
||||
@NgModule({
|
||||
declarations: [
|
||||
HelloWorld, SimpleCmp, WithRefsCmp, InheritedCmp, SimpleApp, ComponentWithPropBindings,
|
||||
@ -232,6 +236,26 @@ describe('TestBed', () => {
|
||||
expect(simpleApp.nativeElement).toHaveText('simple - inherited');
|
||||
});
|
||||
|
||||
it('should resolve components without async resources synchronously', (done) => {
|
||||
TestBed
|
||||
.configureTestingModule({
|
||||
declarations: [ComponentWithInlineTemplate],
|
||||
})
|
||||
.compileComponents()
|
||||
.then(done)
|
||||
.catch(error => {
|
||||
// This should not throw any errors. If an error is thrown, the test will fail.
|
||||
// Specifically use `catch` here to mark the test as done and *then* throw the error
|
||||
// so that the test isn't treated as a timeout.
|
||||
done();
|
||||
throw error;
|
||||
});
|
||||
|
||||
// Intentionally call `createComponent` before `compileComponents` is resolved. We want this to
|
||||
// work for components that don't have any async resources (templateUrl, styleUrls).
|
||||
TestBed.createComponent(ComponentWithInlineTemplate);
|
||||
});
|
||||
|
||||
onlyInIvy('patched ng defs should be removed after resetting TestingModule')
|
||||
.it('make sure we restore ng defs to their initial states', () => {
|
||||
@Pipe({name: 'somePipe', pure: true})
|
||||
|
Reference in New Issue
Block a user