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

汤姆·拉奇

我已经创建了一个运行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 }使用justReportService可以正常运行,但这意味着我无法运行我的测试之一。我想创建一个间谍对象mockReportService = jasmine.createSpyObj(['getReport']);

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

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

Arnaud Denoyelle

问题来自滥用jasmine.createSpyObj您有2个选择:

  1. 使用jasmine.createSpyObj但以正确的方式:
// Note the first arg, you were missing it
mockReportService = jasmine.createSpyObj(ReportService, ['getReport']);


// Then, explain what to do with it :
beforeEach(() => {
  [...]
  // When called, make it return an Observable so that the call to subscribe() succeeds
  mockReportService.getReport.and.returnValue(of({}));
  fixture.detectChanges();
});
  1. 不要使用间谍

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

  const mockReportService = {
    getReport: () => of({})
  }

  providers: [
    { provide: ReportService, useValue: mockReportService },

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS中$ routeChangeStart的Jasmine单元测试用例

来自分类Dev

为什么单元测试中未处理的异常不会导致使用MSTest失败?

来自分类Dev

“单元测试失败”的BeautifulSoup

来自分类Dev

使用Jasmine&Karma的AngularJS中具有依赖项的工厂的单元测试失败

来自分类Dev

Umbraco单元测试失败

来自分类Dev

角度单元测试Jasmine Spy错误

来自分类Dev

AngularJs Jasmine单元测试中的$ httpBackend

来自分类Dev

如何在Jasmine中单元测试服务相关功能?

来自分类Dev

使用Jasmine进行单元测试$ modal

来自分类Dev

验证单元测试失败

来自分类Dev

监视服务方法时,Jasmine单元测试失败

来自分类Dev

什么差异?(由于multine字符串中的空白导致Python单元测试失败(?))

来自分类Dev

单元测试失败

来自分类Dev

模板别名导致单元测试失败

来自分类Dev

Scala期货中的单元测试失败

来自分类Dev

角度单元测试失败,但本地失败

来自分类Dev

Umbraco单元测试失败

来自分类Dev

Angular单元测试Jasmine Spy错误

来自分类Dev

AngularJS + Jasmine的单元测试滑块指令

来自分类Dev

Rails单元测试失败

来自分类Dev

单元测试仅在ARM中失败

来自分类Dev

为什么在单元测试中对instanceOf的测试失败?

来自分类Dev

监视服务方法时,Jasmine单元测试失败

来自分类Dev

jsonwebtoken导致单元测试失败

来自分类Dev

通过TFS在Visual Studio中运行Jasmine单元测试

来自分类Dev

Karma单元测试在phantomjs中失败

来自分类Dev

Angular 服务中的单元测试 $q 承诺 - Karma、Jasmine

来自分类Dev

Kendo 模板的 Karma Jasmine 单元测试

来自分类Dev

django 测试中 MultipleChoiceField 的单元测试总是失败

Related 相关文章

热门标签

归档