ng2-bootstrap-base-modified
Version:
Native Angular Bootstrap Components Typeahead modified
95 lines (72 loc) • 3.28 kB
text/typescript
// revision 6c0b585aa4a7c13c44631915d13488e6967162f4
import { TestBed, ComponentFixture } from '@angular/core/testing';
import { createGenericTestComponent } from './test/common';
import { Component } from '@angular/core';
import { CollapseModule } from '../../collapse';
const createTestComponent = (html: string) =>
createGenericTestComponent(html, TestComponent) as ComponentFixture<TestComponent>;
function getCollapsibleContent(element: HTMLElement): HTMLDivElement {
return (element as HTMLDivElement).querySelector('.collapse');
}
describe('bs-collapse', () => {
let html = `<div [collapse]="collapsed">Some content</div>`;
beforeEach(() => {
TestBed.configureTestingModule({declarations: [TestComponent], imports: [CollapseModule]});
TestBed.overrideComponent(TestComponent, {set: {template: html}});
});
it('should have content open and aria-expanded true', () => {
const fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
const collapseEl = getCollapsibleContent(fixture.nativeElement);
expect(collapseEl).toHaveCssClass('in');
expect(collapseEl).toHaveCssClass('show');
expect(collapseEl.getAttribute('aria-expanded')).toBe('true');
});
it('should have content closed and aria-expanded false', () => {
const fixture = TestBed.createComponent(TestComponent);
const tc = fixture.componentInstance;
tc.collapsed = true;
fixture.detectChanges();
const collapseEl = getCollapsibleContent(fixture.nativeElement);
expect(collapseEl).not.toHaveCssClass('in');
expect(collapseEl).not.toHaveCssClass('show');
expect(collapseEl.getAttribute('aria-expanded')).toBe('false');
});
it('should toggle collapsed content based on bound model change', () => {
const fixture = TestBed.createComponent(TestComponent);
fixture.detectChanges();
const tc = fixture.componentInstance;
const collapseEl = getCollapsibleContent(fixture.nativeElement);
expect(collapseEl).toHaveCssClass('in');
expect(collapseEl).toHaveCssClass('show');
tc.collapsed = true;
fixture.detectChanges();
expect(collapseEl).not.toHaveCssClass('in');
expect(collapseEl).not.toHaveCssClass('show');
tc.collapsed = false;
fixture.detectChanges();
expect(collapseEl).toHaveCssClass('in');
expect(collapseEl).toHaveCssClass('show');
});
it('should allow toggling collapse from outside', () => {
html = `
<button (click)="collapse.toggle()">Collapse</button>
<div [collapse] #collapse="bs-collapse"></div>`;
const fixture = createTestComponent(html);
const compiled = fixture.nativeElement;
const collapseEl = getCollapsibleContent(compiled);
const buttonEl = compiled.querySelector('button');
buttonEl.click();
fixture.detectChanges();
expect(collapseEl).not.toHaveCssClass('in');
expect(collapseEl).not.toHaveCssClass('show');
buttonEl.click();
fixture.detectChanges();
expect(collapseEl).toHaveCssClass('in');
expect(collapseEl).toHaveCssClass('show');
});
});
@Component({selector: 'test-cmp', template: ''})
class TestComponent {
public collapsed:string = false;
}