Repository navigation
Description
🐞 bug report
Affected Package
The issue is caused by package @angular/core@^8
Is this a regression?
Yes, the previous version in which this bug was not present was: @angular/core@7
Description
The problem occurs when:
- The base class has a constructor with an injected service. (
Injectorfrom the example)
@Injectable()
export class BaseService {
// "Injector" is just for the sake of example. Any injectable would have the same problem.
constructor(public injector: Injector) {
}
}- Child class has no constructor (i.e., it relies on base class constructor) AND at least one property with the default value.
@Injectable()
export class MyLibService extends BaseService {
public foo = 'bar';
}- (dont ask me how I have found this, but:) In
angular.json[lib name].test.options.codeCoverageshould be true.
PROBLEM:
injector is undefined in the instance of MyLibService.
🚩 Removing property from the child class (2) AND/OR opting out codeCoverage config in angular.json (3) doesn't brake test.
As a result, I can't have a class inheritance and code coverage at the same time.
I could put a constructor in the child class and call super by passing all required arguments manually, but it's the last option since the real-life scenario is much more complicated than the example provided here.
🔬 Minimal Reproduction
git repo: https://github.com/ddramone/ng-8-library-inheritance-di-test-bug
reproduce steps:
- Install angular 8 cli
- Clone
git clone https://github.com/ddramone/ng-8-library-inheritance-di-test-bug.git npm i- run Test
ng test my-lib
Expected behavior
Test should pass = Injector service should be available in the service instance.
Activity
Airblader commentedon Jun 28, 2019
Related to microsoft/TypeScript#6979 I think.
alxhub commentedon Jul 2, 2019
Possibly related to #31333? @ddramone can you try again with the latest Angular/CLI?
ip7e commentedon Jul 3, 2019
I've tried the latest cli (8.1.0), didn't work. (updated package versions in the repo as well)
richardlnnr commentedon Aug 21, 2019
I've had the same problem
andreyjamer commentedon Sep 9, 2019
I got the same problem.
It appears only if tests are running with code coverage:
ng test --code-coverageThe usual
ng testor any type of build (JIT or AOT) gives no errors.For now the problem can be solved by injecting services on child level and passing them to parent component.
petrce commentedon Oct 18, 2019
tested on angular 8.2.11 with cli 8.3.12 and it is still not fixed, now I have to add tons of workarounds :(
22 remaining items
fix(compiler): properly compile DI factories when coverage reporting …
fix(compiler): properly compile DI factories when coverage reporting …
angular-automatic-lock-bot commentedon Feb 21, 2022
This issue has been automatically locked due to inactivity.
Please file a new issue if you are encountering a similar or related problem.
Read more about our automatic conversation locking policy.
This action has been performed automatically by a bot.