Pour tester deux composants, vous devez charger les deux dans le même TestBed
. Par exemple:
describe('component interaction',() => {
let fixture: ComponentFixture<PlayerListComponent>;
let component: PlayerListComponent;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [PlayerListComponent, PlayerAddComponent],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PlayerListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should set the parent flag when the child method is called',() => {
// Arrange
const child: PlayerAddComponent = fixture.debugElement
.query(By.directive(PlayerAddComponent))
.componentInstance;
// Act
child.clkCancle(); // ...Cancel?
fixture.detectChanges();
// Assert
expect(component.flag).toBe(false, 'parent flag should be set');
}
});
Sinon, vous devriez juste vérifier que l'enfant émet au bon moment, car il ne doit pas faire partie de la responsabilité ce qui se passe à la suite de l'enfant de ce (ce comportement pourrait changer sans enfant en cours de modification, ou être différent selon l'endroit où l'enfant est utilisé):
it('should emit when the method is called', done => {
component.clkCancle(); // here component is PlayerAddComponent
component.notifyParent.subscribe(flag => {
expect(flag).toBe(false, 'should emit false');
done();
});
});
Notez que, dans les deux cas, je recommande le test que cela se produit lorsque vous cliquez sur un bouton, en utilisant par exemple fixture.nativeElement.querySelector('...').click();
, plutôt que lorsque la méthode est appelée; cela permet de séparer le comportement de l'implémentation , ce qui vous permet de renommer les méthodes internes sans avoir besoin de mettre à jour les tests.
* "Ceci placera la propriété du composant parent 'flag' à false" * - non ce n'est pas le cas, ce n'est pas le travail * de l'enfant *. L'enfant émet juste, que vous pouvez tester dans les tests unitaires enfants; il appartient au * parent * d'y répondre le cas échéant. Si vous voulez tester les deux composants ensemble, déclarez * both * dans un 'TestBed' et instanciez le parent. – jonrsharpe
Dans votre test, vous créez un composant avec un modèle comme ' ', et vous testez que, lorsque vous cliquez sur le bouton annuler, le drapeau du composant est bien défini sur false. Ou vous utilisez le composant parent réel dans votre test, si vous voulez tester l'intégration du parent et de son enfant. –
J'ai écrit mon fichier spec pour le composant enfant et utilisé sous html dans le composant parent pour le lier. app-addplayer> –