Skip to content

Commit 863c1d4

Browse files
heroes: add shallow test for HeroComponent
1 parent e803d38 commit 863c1d4

3 files changed

Lines changed: 45 additions & 17 deletions

File tree

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
<span class="badge">{{hero.id}}</span>
22
<span>{{hero.name}}</span>
3-
<button class="delete"
4-
(click)="onButtonClick(); $event.stopPropagation()">x</button>
3+
<button class="delete" (click)="onDelete()">x</button>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { Component } from '@angular/core';
2+
import { TestBed, async, ComponentFixture } from '@angular/core/testing';
3+
import { By } from '@angular/platform-browser';
4+
import { HeroComponent } from './hero.component';
5+
import { Hero } from '../shared/hero';
6+
7+
@Component({ selector: 'app-test', template: `<app-hero [hero]="hero" (delete)="onDelete($event)"></app-hero>`})
8+
class TestContainerComponent {
9+
hero: Hero;
10+
onDelete = jasmine.createSpy('onDelete');
11+
}
12+
13+
describe('HeroComponent', () => {
14+
let fixture: ComponentFixture<TestContainerComponent>;
15+
16+
beforeEach(async(() => {
17+
TestBed.configureTestingModule({
18+
declarations: [TestContainerComponent, HeroComponent]
19+
});
20+
fixture = TestBed.createComponent(TestContainerComponent);
21+
}));
22+
23+
it('should display the hero passed in as the hero input', () => {
24+
fixture.componentInstance.hero = { id: 121, name: 'Mr Hero', strength: 4 };
25+
fixture.detectChanges();
26+
expect(fixture.nativeElement.textContent).toContain('121');
27+
expect(fixture.nativeElement.textContent).toContain('Mr Hero');
28+
});
29+
30+
it('should trigger the delete output when the X button is clicked', () => {
31+
fixture.componentInstance.hero = { id: 121, name: 'Mr Hero', strength: 4 };
32+
fixture.detectChanges();
33+
34+
const button = fixture.debugElement.query(By.css('button'));
35+
button.triggerEventHandler('click', null);
36+
fixture.detectChanges();
37+
38+
expect(fixture.componentInstance.onDelete).toHaveBeenCalledWith(fixture.componentInstance.hero);
39+
});
40+
});
Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
1-
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
2-
import { Router } from '@angular/router';
3-
4-
import { Hero } from '../shared/hero';
1+
import { Component, Input, Output, EventEmitter } from '@angular/core';
2+
import { Hero } from '../shared/hero';
53

64
@Component({
75
selector: 'app-hero',
86
templateUrl: './hero.component.html',
97
styleUrls: ['./hero.component.css']
108
})
11-
export class HeroComponent implements OnInit {
9+
export class HeroComponent {
1210
@Input() hero: Hero;
1311
@Output() delete = new EventEmitter();
1412

15-
constructor() {
16-
console.log(4);
17-
}
18-
19-
ngOnInit(): void {
20-
console.log(4.5);
21-
}
22-
23-
onButtonClick(): void {
13+
onDelete(): void {
2414
this.delete.next(this.hero);
2515
}
26-
2716
}

0 commit comments

Comments
 (0)