Jasmine 单元测试中 MockService 的 UseValue 导致测试失败

时间:2021-02-03 20:02:14

标签: angular typescript unit-testing jasmine karma-jasmine

我在 karma/jasmine 加载器运行时创建了一个 StackBlitz,以便您可以看到测试通过/失败。

应用程序正常工作。

我的测试应该没问题并且会通过,但是我在使用模拟服务而不是正确的 createspyobject 服务时遇到了一个奇怪的错误。

component.ts

  getReportFunc(): void {
    this.reportService.getReport(this.urn).subscribe(selectedReport => {
      this.model = selectedReport;
    });
  }

简单调用服务以获取“getReport”。我将添加一个测试来检查报告是否已被调用。但是不能因为这个问题。

规范

describe("SearchComponent", () => {
  let component: SearchComponent;
  let fixture: ComponentFixture<SearchComponent>;
  let mockReportService;

  beforeEach(async(() => {
      mockReportService = jasmine.createSpyObj(['getReport']);
    TestBed.configureTestingModule({
      declarations: [SearchComponent],
      providers: [
        //ReportService,
            { provide: ReportService, useValue: mockReportService },
...

问题在于 { provide: ReportService, useValue: mockReportService } 仅使用 ReportService 可以正常运行,但这意味着我无法运行其中一项测试。我想创建一个间谍对象 mockReportService = jasmine.createSpyObj(['getReport']);

您将在 StackBlitz 中看到的错误是 TypeError: Cannot read property 'subscribe' of undefined

如果有人可以帮助我使用模拟服务运行它,以便我可以测试 getReport 订阅功能,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

问题来自于滥用 . 你有两个选择:

  1. 以正确的方式使用 Set pasteId = ColumnA.xlUp
jasmine.createSpyObj
  1. 不要使用间谍

当然,间谍很整洁,但只有当您想在不同的单元测试期间更改返回值时,它们才有用。如果您只需要始终返回一个值,无论哪个,您都可以选择这样的硬编码对象:

jasmine.createSpyObj
相关问题