Day after day, I have been improving my code, and I have read some important books (Clean Code; The Clean Coder; Domain-Driven-Design…)
What is a simple project? According to Uncle bob :
- Do all the tests
- No code duplication
- Express the programmer’s purpose
- Minimize the number of classes and methods
Check this out! He put:
DO ALL THE TESTS in the first.
I had some difficulty to undertanding this affirmation because I never seen a good use case with TDD (Test-driven development).
But in my last task I could undertand. Basically, I needed create a “simple notification” with a lot of rules.
The problem
- A started programming and after solving something I broke something else.
- It was very exhausting for me, because I need to follow a big “script”
- I wrote a good code, but I had a lot of difficults to review this script.
My worry
- If someone get need to change the code?
- Will he follow the script?
- Because the script is in my mind and probably after some days I will forget.
- How to ensure peace of mind for the future?
- DO ALL THE TESTS
- So I decided to write unit test in Angular!
The Big Mistake
- I know Angular and I have already worked on big projects with this framework.
- I created this course in Angular too.
- However, I had never created a unit test with Angular 😨
- When using the command: ng generate component we get this result:

- But I always deleted the file .spec because I never implemented anything.
- So, to me, it made sense.
Difficults to implements unit test
- After I started implementing the unit test I had some challenges just to compile the component.
- “Ok… It’s my first time doing that, I thought”.
- And in my first time attempt, I tried to implement unit test in a complex component 🤡
Components must be independent
- When working with Web Components, we need to follow some recommendations.
- Each component must be independent.
- However, sometimes we forget this, and the application still work the same.
- For example: The parent component import module “x”, and the child component needs module “x”, but the programmer forgets to add it.
- The sofware is still able to run, but this component has a problem.
What problem?
- If I try to use the child component in another parent, and it doesn’t import module “x”, we will have problems to use the component.
- This case emphasizes the importance of independence.
My head exploded
- Because the .spec in Angular solve this situation very simply.
- How? I create this simple test:
describe('DialogViewNotificationComponent', () => {
let component: DialogViewNotificationComponent;
let fixture: ComponentFixture<DialogViewNotificationComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [DialogViewNotificationModule],
providers: [
{
provide: MatDialogRef,
useValue: getDialogRefMock()
},
{
provide: MAT_DIALOG_DATA,
useValue: {
message: getMessageUnread(),
idOpen: 290,
byEvtMessage: true,
viewMessageEnum: ViewMessageEnum.MESSAGE_NO_READ
}
}
]
}).compileComponents();
fixture = TestBed.createComponent(DialogViewNotificationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
- But I received this error:

- The reason was that I didn’t add HttpClientModule and others modules either.
- In other words, my component was not independent.
- Look at the differences:

Conclusion
- Now I got success!

- And I will start to implements the units tests.
- Without much effort, I can garantee the independence of my component.
- It’s so fanny because I tried to control this situation, and I failed many times.
- I wrote this post: (🇧🇷) What happens when importing unnecessary modules in Angular?
- Because I saw a lot of developers using unnecessary modules in some component, and that is wrong.
- But create a component that is not independent also is and the unit test helped me!
- Now, all of my components will have .spec file!
Thanks, Uncle Bob! Thank you for reading! See you next time 🙂