Я нашел общее c решение моей проблемы по тестированию ленивых загружаемых маршрутов, основанное на ответе Aaka sh Garg. Я делюсь своим решением, если оно может помочь кому-то с той же проблемой. Это решение работает для меня, но я не утверждаю, что это идеальный способ сделать это.
По сути, я добавил настраиваемый сопоставитель для жасмина, чтобы проверить равенство маршрутов.
файл исходного кода equal-route-matcher.ts :
import MatchersUtil = jasmine.MatchersUtil;
import CustomMatcherFactories = jasmine.CustomMatcherFactories;
import CustomEqualityTester = jasmine.CustomEqualityTester;
import CustomMatcher = jasmine.CustomMatcher;
import CustomMatcherResult = jasmine.CustomMatcherResult;
function replacer(key: any, value: any) {
if (typeof value === 'function') {
value = value.toString();
}
return value;
}
export const EqualRouteMatcher: CustomMatcherFactories = {
toEqualRoute: (util: MatchersUtil, customEqualityTester: CustomEqualityTester[]): CustomMatcher => {
return {
compare: (actual: any, expected: any): CustomMatcherResult => {
let actualstring: string, expectedstring: string;
actualstring = JSON.stringify(actual, replacer).replace(/(\\t|\\n)/g,'');
expectedstring = JSON.stringify(expected, replacer).replace(/(\\t|\\n)/g,'');
if (actualstring === expectedstring) {
return {
pass: true,
message: 'Routes are equal'
};
} else {
return {
pass: false,
message: 'Expected route ' + actualstring + ' to equal route ' + expectedstring
};
}
}
};
}
};
Файл определения типа equal-route-matcher-type.d.ts :
declare namespace jasmine {
interface Matchers<T> {
toEqualRoute(expected: any, expectationFailOutput?: any): boolean;
}
}
Наконец, вы можете импортировать настраиваемый сопоставитель в файл модульного теста и использовать его следующим образом:
import { routes } from './app.routes';
import { EqualRouteMatcher } from './equal-route-matcher.ts';
describe('app.routes', () => {
beforeEach(() => {
jasmine.addMatchers(EqualRouteMatcher);
});
it('should contain a route for /', () => {
expect(routes.length).toEqual(1);
expect(routes[0]).toEqualRoute({path: '',loadChildren: () => import('./main/main.module').then(m => m.MainModule)});
});
});