Angular 如何检查是否从subscribe()中调用了服务方法

Angular 如何检查是否从subscribe()中调用了服务方法,angular,typescript,jasmine,Angular,Typescript,Jasmine,我有一个反应式表单,在提交过程中,我向API发送http请求,并根据其结果(成功/失败),调用我的警报服务以显示警报: public submit(formValues): void { this.generationProjectService .add( new CreateGenerationProjectRequest( formValues.selectedIndustry,

我有一个反应式表单,在提交过程中,我向API发送http请求,并根据其结果(成功/失败),调用我的警报服务以显示警报:

public submit(formValues): void {
    this.generationProjectService
        .add(
            new CreateGenerationProjectRequest(
                formValues.selectedIndustry,
                formValues.selectedEdition,
                formValues.selectedDate,
                formValues.selectedTemplate,
                formValues.selectedImportant
            )
        )
        .subscribe(
            newGenerationProject => {
                this.domainEventService.onNewGenerationProject.emit(newGenerationProject);

                this.alertService.success('Project was successfully added to Overnight Generation');
            },
            () => {
                this.alertService.error('Something went wrong');
            }
        );
    this.close();
}
这很好用,我想测试一下,但是我很难理解

fit('should notify failed project addition', () => {
    spyOn(generationProjectService, 'add').and.throwError('up');
    const errorSpy = spyOn(alertService, 'error').and.callThrough();

    component.submit({});

    fixture.detectChanges();

    fixture.whenStable().then(() => {
        expect(errorSpy).toHaveBeenCalledTimes(1);
    });
});
但这是行不通的


为了让它工作,我必须在测试用例中更改什么。或者我可以对代码进行更改以使其更易于测试?

我认为是因为您的间谍正在抛出一个Javascript错误而不是可观察的错误,请尝试以下方法:

import { throwError } from 'rxjs';

spyOn(generationProjectService, 'add').and.returnValue(throwError('This is an error!'));

我认为是因为您的间谍抛出了一个Javascript错误,而不是可观察到的发出错误,请尝试以下方法:

import { throwError } from 'rxjs';

spyOn(generationProjectService, 'add').and.returnValue(throwError('This is an error!'));

只需添加“调试器;”在您的方法内部,转到控制台。若函数被调用,它将停止执行。只需添加“调试器;”在您的方法内部,转到控制台。若函数被调用,它将在那个里停止执行。