angular/packages/platform-browser-dynamic/test/testing_public_browser_spec.ts
Alex Rickabaugh 8c71b9fc42 refactor: delete the View Engine runtime (#43884)
This commit removes the View Engine runtime. Itself, this change is
relatively straightforward, but it represents the final step in a multi-year
journey. It's only possible due to the hard work of many current and former
team members and collaborators, who are too numerous to list here.

Co-authored-by: Alan Agius <alan.agius4@gmail.com>
Co-authored-by: Andrew Kushnir <akushnir@google.com>
Co-authored-by: Andrew Scott <atscott01@gmail.com>
Co-authored-by: Andrew Seguin <andrewjs@google.com>
Co-authored-by: Cédric Exbrayat <cedric@ninja-squad.com>
Co-authored-by: Charles Lyding <19598772+clydin@users.noreply.github.com>
Co-authored-by: Dave Shevitz <dshevitz@google.com>
Co-authored-by: Doug Parker <dgp1130@users.noreply.github.com>
Co-authored-by: Dylan Hunn <dylhunn@gmail.com>
Co-authored-by: Emma Twersky <emmatwersky@google.com>
Co-authored-by: George Kalpakas <kalpakas.g@gmail.com>
Co-authored-by: Igor Minar <iminar@google.com>
Co-authored-by: Jeremy Elbourn <jelbourn@google.com>
Co-authored-by: Jessica Janiuk <jessicajaniuk@google.com>
Co-authored-by: JiaLiPassion <JiaLi.Passion@gmail.com>
Co-authored-by: Joey Perrott <josephperrott@gmail.com>
Co-authored-by: Joost Koehoorn <joost.koehoorn@gmail.com>
Co-authored-by: Kristiyan Kostadinov <crisbeto@abv.bg>
Co-authored-by: Madleina Scheidegger <mscheid@google.com>
Co-authored-by: Mark Thompson <2554588+MarkTechson@users.noreply.github.com>
Co-authored-by: Minko Gechev <mgechev@gmail.com>
Co-authored-by: Paul Gschwendtner <paulgschwendtner@gmail.com>
Co-authored-by: Pawel Kozlowski <pkozlowski.opensource@gmail.com>
Co-authored-by: Pete Bacon Darwin <pete@bacondarwin.com>
Co-authored-by: Wagner Maciel <wagnermaciel@google.com>
Co-authored-by: Zach Arend <zachzach@google.com>

PR Close #43884
2021-11-23 21:10:06 +00:00

131 lines
4.5 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {ResourceLoader} from '@angular/compiler';
import {Compiler, Component, NgModule} from '@angular/core';
import {fakeAsync, inject, TestBed, tick, waitForAsync} from '@angular/core/testing';
import {ResourceLoaderImpl} from '@angular/platform-browser-dynamic/src/resource_loader/resource_loader_impl';
// Components for the tests.
class FancyService {
value: string = 'real value';
getAsyncValue() {
return Promise.resolve('async value');
}
getTimeoutValue() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('timeout value');
}, 10);
});
}
}
// Tests for angular/testing bundle specific to the browser environment.
// For general tests, see test/testing/testing_public_spec.ts.
if (isBrowser) {
describe('test APIs for the browser', () => {
describe('using the async helper', () => {
let actuallyDone: boolean;
beforeEach(() => {
actuallyDone = false;
});
afterEach(() => {
expect(actuallyDone).toEqual(true);
});
it('should run async tests with ResourceLoaders', waitForAsync(() => {
const resourceLoader = new ResourceLoaderImpl();
resourceLoader
.get('/base/angular/packages/platform-browser/test/static_assets/test.html')
.then(() => {
actuallyDone = true;
});
}),
10000); // Long timeout here because this test makes an actual ResourceLoader.
});
describe('using the test injector with the inject helper', () => {
describe('setting up Providers', () => {
beforeEach(() => {
TestBed.configureTestingModule(
{providers: [{provide: FancyService, useValue: new FancyService()}]});
});
it('provides a real ResourceLoader instance',
inject([ResourceLoader], (resourceLoader: ResourceLoader) => {
expect(resourceLoader instanceof ResourceLoaderImpl).toBeTruthy();
}));
it('should allow the use of fakeAsync',
fakeAsync(inject([FancyService], (service: any /** TODO #9100 */) => {
let value: any /** TODO #9100 */;
service.getAsyncValue().then(function(val: any /** TODO #9100 */) {
value = val;
});
tick();
expect(value).toEqual('async value');
})));
});
});
describe('Compiler', () => {
it('should return NgModule id when asked', () => {
@NgModule({
id: 'test-module',
})
class TestModule {
}
TestBed.configureTestingModule({
imports: [TestModule],
});
const compiler = TestBed.inject(Compiler);
expect(compiler.getModuleId(TestModule)).toBe('test-module');
});
});
describe('errors', () => {
describe('should fail when an ResourceLoader fails', () => {
// TODO(alxhub): figure out why this is failing on saucelabs
xit('should fail with an error from a promise', async () => {
@Component({selector: 'bad-template-comp', templateUrl: 'non-existent.html'})
class BadTemplateUrl {
}
TestBed.configureTestingModule({declarations: [BadTemplateUrl]});
await expectAsync(TestBed.compileComponents())
.toBeRejectedWith('Failed to load non-existent.html');
}, 10000);
});
});
describe('TestBed createComponent', function() {
// TODO(alxhub): disable while we figure out how this should work
xit('should allow an external templateUrl', waitForAsync(() => {
@Component({
selector: 'external-template-comp',
templateUrl: '/base/angular/packages/platform-browser/test/static_assets/test.html'
})
class ExternalTemplateComp {
}
TestBed.configureTestingModule({declarations: [ExternalTemplateComp]});
TestBed.compileComponents().then(() => {
const componentFixture = TestBed.createComponent(ExternalTemplateComp);
componentFixture.detectChanges();
expect(componentFixture.nativeElement.textContent).toEqual('from external template');
});
}),
10000); // Long timeout here because this test makes an actual ResourceLoader
// request, and is slow on Edge.
});
});
}