import {Component, Input} from '@angular/core';
@Component({
selector: 'my-com',
template: `
<div>
<h1 class="title">{title}</h1>
<div class="content">
<ng-content></ng-content>
</div>
</div>
`
})
export class MyComponent {
@Input() title: string = '';
}
import { ComponentFixture, TestBed} from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { MyComponent } from 'path/to/mycomponent';
let comp: MyComponent;
let fixture: ComponentFixture<MyComponent>;
describe('MyComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ MyComponent ]
});
fixture = TestBed.createComponent(MyComponent);
comp = fixture.componentInstance;
fixture.detectChanges();
});
it('should create the component', () => {
expect(comp).toBeTruthy();
});
it('should bind the title', () => {
let de: DebugElement = fixture.debugElement.query(By.css('.title'));
let el: HTMLElement = de.nativeElement;
const myTitle: string = 'myTitle';
comp.title = myTitle;
fixture.detectChanges();
expect(el.textContent).toBe(myTitle);
});
});
Now, how can I set the content to my component?it('should transclude the content', () => {
let de: DebugElement = fixture.debugElement.query(By.css('.content'));
let el: HTMLElement = de.nativeElement;
const myContent: string = '<div id="test"></div>';
comp.CONTENT = myContent; //how to set content ¿?
fixture.detectChanges();
expect(el.children[0].id).toBe('test');
});
$compile('<my-com><div id="test"></div></my-com>')(scope);
@Component({
template: `<my-com title="foo">Hello world</my-com>`
})
class TestHostComponent {}