import { ChangeDetectionStrategy, Component, signal, WritableSignal } from "@angular/core"; import { ComponentFixture, TestBed } from "@angular/core/testing"; import { By } from "@angular/platform-browser"; import { ToggleGroupModule } from "./toggle-group.module"; import { ToggleComponent } from "./toggle.component"; describe("Button", () => { let fixture: ComponentFixture; let testAppComponent: TestAppComponent; let buttonElements: ToggleComponent[]; let radioButtons: HTMLInputElement[]; beforeEach(async () => { TestBed.configureTestingModule({ imports: [TestAppComponent], }); await TestBed.compileComponents(); fixture = TestBed.createComponent(TestAppComponent); testAppComponent = fixture.debugElement.componentInstance; buttonElements = fixture.debugElement .queryAll(By.css("bit-toggle")) .map((e) => e.componentInstance); radioButtons = fixture.debugElement .queryAll(By.css("input[type=radio]")) .map((e) => e.nativeElement); fixture.detectChanges(); }); it("should select second element when setting selected to second", () => { testAppComponent.selected.set("second"); fixture.detectChanges(); expect(buttonElements[1].selected()).toBe(true); }); it("should not select second element when setting selected to third", () => { testAppComponent.selected.set("third"); fixture.detectChanges(); expect(buttonElements[1].selected()).toBe(false); }); it("should emit new value when changing selection by clicking on radio button", () => { testAppComponent.selected.set("first"); fixture.detectChanges(); radioButtons[1].click(); expect(testAppComponent.selected()).toBe("second"); }); }); @Component({ selector: "test-app", template: ` First Second Third `, imports: [ToggleGroupModule], changeDetection: ChangeDetectionStrategy.OnPush, }) class TestAppComponent { readonly selected: WritableSignal = signal(undefined); }