import '@angular/compiler'; import 'zone.js'; import 'zone.js/testing'; import { Component } from '@angular/core'; import { TestBed, ComponentFixture } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { BrowserDynamicTestingModule, platformBrowserDynamicTesting, } from '@angular/platform-browser-dynamic/testing'; import { TabsComponent, TabComponent } from './tabs.component'; try { TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); } catch { // already initialized } @Component({ standalone: true, imports: [TabsComponent, TabComponent], template: ` Content 1 Content 2 Content 3 `, }) class TestHostComponent {} describe('TabsComponent', () => { let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ imports: [TestHostComponent], }).compileComponents(); fixture = TestBed.createComponent(TestHostComponent); fixture.detectChanges(); }); it('should render tabs and set the first one as active', () => { const tabs = fixture.debugElement.queryAll(By.css('.mv-tabs__tab')); expect(tabs.length).toBe(3); expect(tabs[0].nativeElement.textContent.trim()).toBe('Tab 1'); expect(tabs[0].nativeElement.classList.contains('mv-tabs__tab--active')).toBe(true); const panels = fixture.debugElement.queryAll(By.css('.mv-tabs__panel')); expect(panels[0].nativeElement.hidden).toBe(false); expect(panels[1].nativeElement.hidden).toBe(true); }); it('should change active tab when a tab is clicked', () => { const tabs = fixture.debugElement.queryAll(By.css('.mv-tabs__tab')); tabs[1].nativeElement.click(); fixture.detectChanges(); expect(tabs[0].nativeElement.classList.contains('mv-tabs__tab--active')).toBe(false); expect(tabs[1].nativeElement.classList.contains('mv-tabs__tab--active')).toBe(true); const panels = fixture.debugElement.queryAll(By.css('.mv-tabs__panel')); expect(panels[0].nativeElement.hidden).toBe(true); expect(panels[1].nativeElement.hidden).toBe(false); }); it('should not change to a disabled tab on click', () => { const tabs = fixture.debugElement.queryAll(By.css('.mv-tabs__tab')); tabs[2].nativeElement.click(); // Tab 3 is disabled fixture.detectChanges(); expect(tabs[0].nativeElement.classList.contains('mv-tabs__tab--active')).toBe(true); expect(tabs[2].nativeElement.classList.contains('mv-tabs__tab--active')).toBe(false); }); });