我使用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

10-07 14:55