我使用bsmodalref显示modals并使用content
属性发送数据。所以我们有这样一些:
this.followerService.getFollowers(this.bsModalRef.content.channelId).subscribe((followers) => {
this.followerList = followers;
this.followerList.forEach((follower) => {
follower.avatarLink = this.setUserImage(follower.userId);
this.followerEmails.push(follower.email);
});
});
我们正在设置bsmodalref(
this.bsModalRef.content.channelId
)内容中的channelid。它工作得很好。现在我正在为此编写一个单元测试。问题是我不能嘲笑它。我试过超车、间谍等,但似乎没什么用。我使用的是link中提到的方法。另一种选择是使用testbed,但我不太清楚它的用途。有谁能帮我找到实现这一目标的方法吗? 最佳答案
我最近不得不做一些类似的事情,并嘲笑方法调用的工作。棘手的部分是在测试套件和组件中注入BSMODALL服务。
describe('MyFollowerService', () => {
configureTestSuite(() => {
TestBed.configureTestingModule({
imports: [...],
declarations: [...],
providers: [...]
}).compileComponents();
});
// inject the service
beforeEach(() => {
bsModalService = getTestBed().get(BsModalService);
}
it('test', () => {
// Mock the method call
bsModalService.show = (): BsModalRef => {
return {hide: null, content: {channelId: 123}, setClass: null};
};
// Do the test that calls the modal
});
});
只要您按如下方式调用bsmodal,这种方法就可以工作
let bsModalRef = this.modalService.show(MyChannelModalComponent));
最后,这里有一些关于使用testbed设置测试的更深入的链接。
https://chariotsolutions.com/blog/post/testing-angular-2-0-x-services-http-jasmine-karma/
http://angulartestingquickstart.com/
https://angular.io/guide/testing