Repository navigation
Description
- [x] bug report -> please search issues before submitting
- [ ] feature request
Versions.
$ ng --version
@angular/cli: 1.0.0-rc.2
node: 6.9.5
os: win32 x64
@angular/common: 4.0.0-rc.5
@angular/compiler: 4.0.0-rc.5
@angular/core: 4.0.0-rc.5
@angular/forms: 4.0.0-rc.5
@angular/http: 4.0.0-rc.5
@angular/platform-browser: 4.0.0-rc.5
@angular/platform-browser-dynamic: 4.0.0-rc.5
@angular/router: 4.0.0-rc.5
@angular/cli: 1.0.0-rc.2
@angular/compiler-cli: 4.0.0-rc.5
Repro steps.
I have made a sample project, to reproduce this weird behaviour.
Please take a look at: https://github.com/Loster102/angular-coverage-sample
When I run 'ng test -cc true', there is a successful testrun.
But when I look at the coverage report, the branch coverage is really strange.
It says, that the constructor is not fully covered.
Desired functionality.
I would have expected that even the constructor is fully covered.
Mention any other details that might be useful.
In my real world application, there are some further strange behaviours, exactly like the one above.
I try to reproduce these in the sample project. In this application, I'm using angular@4.0.0-rc.2 and @angular/cli@1.0.0-rc.1.
Activity
hotforfeature commentedon Mar 21, 2017
There are two related issues both in Istanbul and TypeScript:
gotwarlost/istanbul#690
microsoft/TypeScript#13455
The latest suggestion from both threads is to run tests with coverage targeting ES6 instead of ES5. Unfortunately from what I can tell, the Angular CLI doesn't use
tsconfig.jsonwhen running tests, and the suggestions of using--compilerOptions '{\"target\":\"es6\"}'won't work since Angular CLI doesn't recognize that.At the moment, there's nothing to do, adding
/* istanbul ignore next */comments everywhere around the constructor won't help. We're deadlocked while waiting for Angular, Istanbul, or TypeScript to change something.filipesilva commentedon Mar 23, 2017
If there's something we can do to help, we'd like to.
stratus1011 commentedon Mar 24, 2017
@hotforfeature you can actually change the "target" to es6 in the src/tsconfig.spec.json with the version of angular cli that you are using. However, if you are running tests on phantomjs it will fail due to the "const" keyword/ES6/ES2015 not being supported yet. There is a beta version of phantomjs that they have released that you could try which should have support for it, but may have other issues.
sandman21dan commentedon Mar 28, 2017
tsconfig.spec file has es6 as a target, running on CLI-1.0.0 still get all the missing branches from all the constructors, maybe I'm missing something?
cpa-level-it commentedon Apr 12, 2017
I have the same problem as @sandman21dan.
Changed target from es5 to es6 in tsconfig.spec.json and constructor branches are still not covered.
Any idea ?
raguilera82 commentedon May 2, 2017
Any solutions? It is really frustrating :/
SURENDARREDDY commentedon May 19, 2017
Since it is being 2 months, just want to know the progress.
Is there any ETA for this issue resolution?
cortopy commentedon May 29, 2017
Changing
targetto es6 in the main tsconfig.json doesn't work eitherrdsedmundo commentedon Jun 14, 2017
Same problem here.
59 remaining items
russcarver commentedon Jun 25, 2018
Same issues with Angular 5.2.11, Jest 23.1.0 and jest-preset-angular 5.2.2. All the istanbul packages pulled in (inspected via package-lock.json) also appear to be the latest.
I even tried upgrading to TypeScript 2.9.2 but no luck.
aleh-vasilyeu commentedon Jan 8, 2019
Why is this issue closed?!

The problem still remains, here is an example of an empty component:
How can I fix this? Thanks.
rmorrise commentedon Jan 8, 2019
We fixed this by modifying
angular.jsonto add thesourceMapflag:The flag should be added under the following path:
projects.my-app.architect.test.sourceMaprmorrise commentedon Jan 8, 2019
Angular CLI team reported that newer CLI versions will correct this automatically:
#13093
Javin007 commentedon Feb 14, 2019
Angular CLI team lies. I'm running the latest angular/jest and still seeing this problem. NONE of the above "solutions" work. I've tried /* istanbul ignore next */, sourcemaps (both on and off) setting the target to es6, even adding the deprecated "mapcoverage" setting. Nothing works. Problem still exists without so much as a workaround. This is not a "closed" bug.
ruimarques commentedon Feb 14, 2019
Before calling a team as liars consider for a moment that you might be missing something or maybe you have encountered an edge case unknown to the community. If you provide a minimum reproducible example (created in stackblitz for instance) it would be more helpful to get your problem sorted out.
Also this issue was closed ages ago - a lot has happend to the CLI since. A regression might have happened in the meantime which, if confirmed, is a reason to reopen it.
mcblum commentedon Feb 14, 2019
@Javin007 bro... come on. These are some of the most capable people working on software today, so the chances that they are lying to cover up a bug that, at its core, leads to an incorrect coverage report number are almost 0.
I'm using the latest CLI and Jest and ignore next works just fine. I would guess there is something else wrong with your setup.
Please consider the tone you take when commenting on projects which are free for you to use. No one owes you a fix, we're all in this together, and people are doing their best.
Javin007 commentedon Feb 14, 2019
@mcblum @ruimarques
I'm sorry if I come off as a bit irritated, but this is a very easily duplicated bug:
1.) Create new "hello world" project.
2.) Install Jest.
3.) Inject HttpClient into the app.component.ts
4.) Run tests with code coverage.
I JUST did it again to verify. It literally happens every time. On multiple versions of angular, and on every environment. And I've spent the last 48 hours searching for a solution, and have tried every single "fix" found on google to no avail. And this has been a problem for quite some time.
I'm not even saying it's specifically the Angular team's fault. It could very likely be a problem with Jest. However, claiming that "it's fixed" when it's not, and it's so easily duplicated is not helpful. Especially when I see numerous posts on numerous different sites (and even in this thread) claiming so without doing the very basic test outlined above. This original post was from March of 2017. It's now February of 2019, and this thread is a history of people continuing to have the exact same problem without a solution at any time. So this isn't just some problem that "cropped up again."
And yes, I'm irritated at spending two days of seeing people saying "it's fixed" when it simply isn't, and none of the MANY, MANY proffered solutions (everything from creating an entirely new project, to reinstalling angular) are anything but a waste of time. This kind of hand-waving away of the problem doesn't get it solved (obviously, since we're now on year two of the same issue).
If you actually have a solution that fixes the problem, then I and the many other people suffering from this problem would very much love to hear it. If you're not having this issue, then what is it that you're doing differently from the above steps? We would very much like to know.
mcblum commentedon Feb 14, 2019
@Javin007 since even the steps you list above could result in a different version being installed on my machine than yours, could you please put the exact configuration in a StackBlitz so one of us can grab the code and see what's up? When you say "install jest" there are 1,000 different options, stable vs. alpha version of
jest-preset-angularand a bunch of other things that can change, so put your exact configuration in a SB and we can see how you're getting the issue you're getting.Once again, I'm currently, as I type, working on a large project using Angular CLI + Jest + Istanbul and all of my ignore statements work correctly.
ahnpnl commentedon Feb 14, 2019
I will drop one cent here:
Javin007 commentedon Feb 14, 2019
FWIW: Here's a project that has the problem: https://yqnigwvz.github.stackblitz.io
mcblum commentedon Feb 14, 2019
@Javin007 could you try with the following:
You will need to change your jest config when you update to the alpha of
jest-preset-angular. It looks something like this:Obviously you'll need to change everything that's different, this is just from my project. Upgrading to the alpha version and sticking with Jest 23 for now should fix it.
Javin007 commentedon Feb 14, 2019
It does indeed seem to be working now. So it would seem it's the fix is indeed in the Jest alpha. Thanks for your help!
angular-automatic-lock-bot commentedon Sep 9, 2019
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.