angular - Stäng ngx-bootstrap-modalen efter enhetstester
Eftersom jag har aktiverat CSS-stilen i enhetstesterna för min Angular-app, varje gång en komponent som visar en modal från ngx-bootstrap körs, förblir den i webbläsaren även efter att just den komponentens enhetstester har körts klart.
Detta gör det svårt att visuellt kontrollera körningen av de andra testerna och testresultaten:
Svar #1
UPPDATERING: kod uppdaterad för ngx-bootstrap 6+, se nedan för äldre versioner
Lösningen är att säkerställa att modalerna är dolda efter varje test som kör koddelar som kan visa modaler:
import { BsModalService } from 'ngx-bootstrap';
// test definitions ...
afterEach(() => {
const modalService: BsModalService = TestBed.inject(BsModalService);
modalService.hide();
});
denna teknik använder hide()-metoden från BsModalService.
Jag har tyckt att det är användbart att ha en hjälpfunktion som jag kan återanvända i mina tester:
export function closeModalsAfterEach() {
afterEach(() => {
const modalService: BsModalService = TestBed.inject(BsModalService);
modalService.hide();
});
}
Gammal kod (för versioner innan ngx-bootstrap 6)
Gammal fungerande lösning tills ngx-bootstrap 5
import { BsModalService } from 'ngx-bootstrap';
// test definitions ...
afterEach(() => {
const modalService: BsModalService = TestBed.get(BsModalService);
modalService.hide(1);
});
export function closeModalsAfterEach(upToLevel: number = 1) {
afterEach(() => {
const modalService: BsModalService = TestBed.get(BsModalService);
for (let level = 1; level <= upToLevel; level++) {
modalService.hide(level);
}
});
}
Svar #2
du kan ta bort det från DOM
afterEach(() => {
// const modalService: BsModalService = TestBed.get(BsModalService);
// modalService.hide(1);
const htmlCollection = document.getElementsByTagName('modal-container');
if (htmlCollection.length > 0 && htmlCollection[0] != null)
htmlCollection[0].remove();
});
