Я решил эту проблему, добавив пользовательскую команду Cypress, которая вызывает метод в приложениях Angular app.component.ts
.Решение выглядит следующим образом:
app.component.ts
export class AppComponent {
constructor(
private router: Router,
private ngZone: NgZone,
) {}
// Method Cypress will call
public navigateByUrl(url: string) {
this.ngZone.run(() => {
this.router.navigateByUrl(url);
});
}
}
cypress / support / commands.ts
// add new command to the existing Cypress interface
declare global {
namespace Cypress {
interface Chainable {
visitAngular: (url: string) => Chainable<Window>;
}
}
}
// Custom function
export function visitAngular(url: string) {
cy.get('body').then($body => {
try {
const el = $body.find('app-root')[0];
const win = el.ownerDocument.defaultView;
const componentInstance = win.ng.probe(el).componentInstance;
cy.log(`Angular nav to '${url}' `);
componentInstance.navigateByUrl(url);
cy.url().should('contain', url);
} catch (error) {
cy.log(`Cypress nav to '${url}' `);
cy.visit(url);
}
});
}
Cypress.Commands.add('visitAngular', visitAngular);
cypress / support / index.d.ts
interface Window {
ng: {
probe: typeof import('@angular/platform-browser/src/dom/debug/ng_probe').inspectNativeElement
};
}
Мы использовали это уже 2 месяца, и это прекрасно работает в локальной разработке, ускоряя выполнение тестов сx3.Но в КИ это другая история.