angular/packages
Alex Rickabaugh deb77bd3df feat(ivy): TestBed support for reusing non-exported components (#30578)
This is a new feature of the Ivy TestBed.

A common user pattern is to test one component with another. This is
commonly done by creating a `TestFixture` component which exercises the
main component under test.

This pattern is more difficult if the component under test is declared in an
NgModule but not exported. In this case, overriding the module is necessary.

In g3 (and View Engine), it's possible to use an NgSummary to override the
recompilation of a component, and depend on its AOT compiled factory. The
way this is implemented, however, specifying a summary for a module
effectively overrides much of the TestBed's other behavior. For example, the
following is legal:

```typescript
TestBed.configureTestingModule({
  declarations: [FooCmp, TestFixture],
  imports: [FooModule],
  aotSummaries: [FooModuleNgSummary],
});
```

Here, `FooCmp` is declared in both the testing module and in the imported
`FooModule`. However, because the summary is provided, `FooCmp` is not
compiled within the context of the testing module, but _is_ made available
for `TestFixture` to use, even if it wasn't originally exported from
`FooModule`.

This pattern breaks in Ivy - because summaries are a no-op, this amounts
to a true double declaration of `FooCmp` which raises an error.

Fixing this in user code is possible, but is difficult to do in an
automated or backwards compatible way. An alternative solution is
implemented in this PR.

This PR attempts to capture the user intent of the following previously
unsupported configuration:

```typescript
TestBed.configureTestingModule({
  declarations: [FooCmp, TestFixture],
  imports: [FooModule],
});
```

Note that this is the same as the configuration above in Ivy, as the
`aotSummaries` value provided has no effect.

The user intent here is interpreted as follows:

1) `FooCmp` is a pre-existing component that's being used in the test
   (via import of `FooModule`). It may or may not be exported by this
   module.

2) `FooCmp` should be part of the testing module's scope. That is, it
   should be visible to `TestFixture`. This is because it's listed in
   `declarations`.

This feature effectively makes the `TestBed` testing module special. It's
able to declare components without compiling them, if they're already
compiled (or configured to be compiled) in the imports. And crucially, the
behavior matches the first example with the summary, making Ivy backwards
compatible with View Engine for tests that use summaries.

PR Close #30578
2019-05-24 14:01:44 -04:00
..
animations refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
bazel fix(bazel): allow ts_library interop with list-typed inputs (#30600) 2019-05-22 16:22:10 -07:00
benchpress build: update rxjs version requirements to 6.4.0 (#30032) 2019-04-22 11:15:33 -07:00
common test(common): update common tests to use static flag (#30626) 2019-05-23 10:31:32 -07:00
compiler test(compiler): update examples and compiler tests (#30626) 2019-05-23 10:31:32 -07:00
compiler-cli test(compiler): update examples and compiler tests (#30626) 2019-05-23 10:31:32 -07:00
core feat(ivy): TestBed support for reusing non-exported components (#30578) 2019-05-24 14:01:44 -04:00
docs refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
elements refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
examples test(compiler): update examples and compiler tests (#30626) 2019-05-23 10:31:32 -07:00
forms refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
http refactor: remove toplevel property accesses (#29329) 2019-05-16 12:08:49 -07:00
language-service refactor: clean up language service from unused code and imports (#30534) 2019-05-17 13:32:06 -07:00
platform-browser perf(ivy): use string concatination instead template string (#30453) 2019-05-23 10:30:58 -07:00
platform-browser-dynamic test(platform-browser-dynamic): avoid swallowing error in CachedResourceLoader test (#30515) 2019-05-16 20:14:04 -07:00
platform-server feat(common): add @angular/common/upgrade package for $location-related APIs (#30055) 2019-04-24 13:49:29 -07:00
platform-webworker feat(platform-webworker): deprecate platform-webworker (#30642) 2019-05-23 15:09:48 -07:00
platform-webworker-dynamic feat(platform-webworker): deprecate platform-webworker (#30642) 2019-05-23 15:09:48 -07:00
private/testing test(ivy): add onlyInIvy perf counter expectations (#30339) 2019-05-09 11:22:00 -07:00
router fix(router): type cast correctly for IE 11 bug breaking URL Unification when comparing objects (#30464) 2019-05-15 14:09:53 -07:00
service-worker feat(service-worker): support bypassing SW with specific header/query param (#30010) 2019-04-25 13:09:44 -07:00
upgrade test(upgrade): rename angular.module() to angular.module_() (#30126) 2019-04-25 12:01:18 -07:00
BUILD.bazel build: rules_nodejs 0.26.0 & use @npm instead of @ngdeps now that downstream angular build uses angular bundles (#28871) 2019-02-28 12:06:36 -08:00
empty.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
goog.d.ts test(ivy): add bundling test todo_i18n (#27420) 2018-12-04 19:59:12 -08:00
license-banner.txt build: bump year (#27880) 2019-01-11 11:15:59 -08:00
README.md Revert "docs: Remove unneeded file (#18106)" 2017-07-20 16:46:47 -05:00
system.d.ts refactor: move angular source to /packages rather than modules/@angular 2017-03-08 16:29:27 -08:00
tsconfig-build.json build: update to rules_typescript 0.25.1 (#28625) 2019-02-21 07:46:21 -08:00
tsconfig-test.json build: update to rules_typescript 0.25.1 (#28625) 2019-02-21 07:46:21 -08:00
tsconfig.json docs(service-worker): improve SwRegistrationOptions docs and add example (#21842) 2019-04-25 12:29:58 -07:00
types.d.ts build: switch to typescript's es2015 typings (#28570) 2019-02-06 14:17:55 -05:00

Angular

The sources for this package are in the main Angular repo. Please file issues and pull requests against that repo.

License: MIT