我正在使用Jenkins管道来构建我的angular 4应用程序。我正在使用angular-cli ng build -prod
和ng test
来运行测试。测试的步骤非常缓慢,比构建本身要花费更多的时间。我发现发生这种情况是因为尽管构建刚刚完成,但在此步骤中所有模块都已重新构建。因为模块已经构建,所以没有办法避免在测试阶段进行重建吗?
答案 0 :(得分:1)
在我的评论之后,这是一个如何在没有Angular的情况下测试Angular组件的示例。
假设您有一个非常简单的路由组件,如下所示:
export class MyRoutedComponent {
constructor(private router: Router) {}
navigateTo(route: string) {
this.router.navigate(route);
}
}
通常的测试是为依赖项提供模拟,并为此使用Testbed。
好吧,您没有被迫这样做,甚至the testing guide都这样告诉您:
Angular TestBed促进了这种测试,如以下各节所示。但是在许多情况下,仅在不涉及DOM的情况下单独测试组件类,就可以通过一种更容易,更明显的方式来验证组件的许多行为。
您可以做的是
describe('MyRoutedComponent', () => {
const routerMock = {
navigate: () => null
};
const instance = new MyRoutedComponent(routerMock);
it('should call router.navigate when navigateTo()', () => {
spyOn(routerMock, 'navigate');
instance.navigateTo('foo');
expect(routerMock.navigate).toHaveBeenCalledWith('foo');
});
});
如您所见,它可以像Testbed一样对组件进行测试,但是由于它不依赖任何HTML,因此按照指南的建议,它是一种更好的解决方案。
答案 1 :(得分:0)
您可以使用我写的一个小帮手precompileForTests()
中的s-ng-dev-utils
函数。它将在套件开始时为您的测试编译所有内容,并使Angular重新使用每个测试的结果。希望对您有所帮助!