【发布时间】:2018-05-29 21:02:48
【问题描述】:
我的 Angular 项目中有一个面包屑组件,您可以在其中传入一个回调函数,当单击面包屑时调用该函数。
用户传入一个对象,该对象包含呈现面包屑的信息,以及单击面包屑时的回调。
回调被添加到面包屑的onclick 事件中,并在用户点击一个事件时调用。
<li *ngFor="let breadcrumb of breadcrumbs">
<span (click)="breadcrumb.callback()">{{breadcrumb.title}}</span>
</li>
这是我尝试过的:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [BreadcrumbsTestComponent, Breadcrumbs]
});
}));
it('should call given callback when breadcrumb is clicked', async(() => {
const fixture = TestBed.createComponent(BreadcrumbComponent);
fixture.detectChanges();
const breadcrumbElements = fixture.nativeElement.querySelectorAll('.breadcrumb');
breadcrumbElements.forEach(breadcrumb => {
breadcrumb.click();
fixture.whenStable().then(() => {
expect(breadcrumb.callback).toHaveBeenCalled();
});
});
}));
const breadcrumbs = [
{
title: 'First Page',
path: '/first',
current: false,
callback: jasmine.createSpy('callback')
}, {
title: 'Second Page',
path: '/second',
current: true,
callback: jasmine.createSpy('callback')
}
];
@Component({
template: `<breadcrumbs [breadcrumbs]="breadcrumbs"></breadcrumbs>`
})
class BreadcrumbsTestComponent {
breadcrumbs = breadcrumbs;
}
如何测试我的 Jasmine 测试中是否调用了回调?
谢谢。
【问题讨论】:
-
你在 Jasmine 中尝试过 spyOn() 吗?
-
您可以将您的面包屑数组作为值提供者注入,然后在您的单元测试中,注册一个带有回调的人工面包屑数组,该数组设置一些您可以测试的标志。您还可以将所有回调设置为
this.navService.changeView之类的,然后注入一个假的 navService。 -
@Esaith 是的,我试过
createSpy。诚然,我是 Jasmine 的新手,所以我仍在努力思考它的间谍概念。