首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在服务中对事件发射器进行单元测试

如何在服务中对事件发射器进行单元测试
EN

Stack Overflow用户
提问于 2021-07-08 17:03:39
回答 1查看 56关注 0票数 0

我有一个名为EmitterService的服务,如下所示。

代码语言:javascript
复制
import { Injectable, EventEmitter } from '@angular/core';

@Injectable()
export class EmitterService {
    public helpDisplayEmitter: EventEmitter<string> = new EventEmitter();

我已经将该服务注入到构造函数中的一个组件中。我有一个名为getHelpDisplay()的方法,在那里我将值发送到发射器。

代码语言:javascript
复制
export class MainPageComponent implements OnInit, OnChanges {
constructor(public emitter: EmitterService) { }

 getHelpDisplay(helpItem: any) {
    this.helpValue = helpItem;
    this.emitter.helpDisplayEmitter.emit(this.helpValue);
  }
}

我想为这个发射器写一个单元测试用例,但是我得到了错误,请帮我解决这个问题。

等级库文件

代码语言:javascript
复制
describe('MainpageComponent', () => {
  let component: MainPageComponent;
  let fixture: ComponentFixture<MainPageComponent>;
  let mainpage, element, de;
  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [],
      providers: [MainPageComponent, EmitterService]
    });
  });

it('should emit false via createCustomer$ from breadCrumbService', inject([EmitterService], (service: EmitterService) => {    
    fixture = TestBed.createComponent(MainPageComponent);
    mainpage = fixture.componentInstance;

    mainpage.getHelpDisplay("helpItem");
    expect(service.helpDisplayEmitter.emit).toHaveBeenCalledWith("helpItem");
  }));

我得到了下面的错误...

代码语言:javascript
复制
Error: <toHaveBeenCalledWith> : Expected a spy, but got Function.
        Usage: expect(<spyObj>).toHaveBeenCalledWith(...arguments)
        Error: <toHaveBeenCalledWith> : Expected a spy, but got Function.
        Usage: expect(<spyObj>).toHaveBeenCalledWith(...arguments)
            at <Jasmine>
            at UserContext.<anonymous> (src/app/mainpage/main-page.component.spec.ts:54:45)
            at TestBedRender3.execute (node_modules/@angular/core/__ivy_ngcc__/fesm2015/testing.js:1953:1)
            at UserContext.<anonymous> (node_modules/@angular/core/__ivy_ngcc__/fesm2015/testing.js:2629:1)
            at ZoneDelegate.invoke (node_modules/zone.js/dist/zone-evergreen.js:364:1)
            at ProxyZoneSpec.push.QpwO.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/zone-testing.js:292:1)
            at ZoneDelegate.invoke (node_modules/zone.js/dist/zone-evergreen.js:363:1)
            at Zone.run (node_modules/zone.js/dist/zone-evergreen.js:123:1)
Chrome Headless 91.0.4472.124 (Windows 10): Executed 1 of 584 (1 FAILED) (0 secs / 0.559 secs)
Chrome Headless 91.0.4472.124 (Windows 10) MainpageComponent should emit false via createCustomer$ from breadCrumbService FAILED
EN

回答 1

Stack Overflow用户

发布于 2021-07-09 12:54:52

您没有监视service.helpDisplayEmitter.emit()方法。使用spyOn将间谍安装到现有对象上。

例如。

main-page.component.ts

代码语言:javascript
复制
import { Component } from '@angular/core';
import { EmitterService } from './emitter.service';

@Component({})
export class MainPageComponent {
  helpValue;
  constructor(public emitter: EmitterService) {}

  getHelpDisplay(helpItem: any) {
    this.helpValue = helpItem;
    this.emitter.helpDisplayEmitter.emit(this.helpValue);
  }
}

emitter.service.ts

代码语言:javascript
复制
import { Injectable, EventEmitter } from '@angular/core';

@Injectable()
export class EmitterService {
  public helpDisplayEmitter: EventEmitter<string> = new EventEmitter();
}

main-page.component.test.ts

代码语言:javascript
复制
import { ComponentFixture, TestBed, inject } from '@angular/core/testing';
import { EmitterService } from './emitter.service';
import { MainPageComponent } from './main-page.component';

fdescribe('MainpageComponent', () => {
  let component: MainPageComponent;
  let fixture: ComponentFixture<MainPageComponent>;
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [MainPageComponent],
      providers: [EmitterService],
    }).compileComponents();
  });

  it('should emit false via createCustomer$ from breadCrumbService', inject(
    [EmitterService],
    (service: EmitterService) => {
      spyOn(service.helpDisplayEmitter, 'emit');
      fixture = TestBed.createComponent(MainPageComponent);
      component = fixture.componentInstance;
      component.getHelpDisplay('helpItem');
      expect(service.helpDisplayEmitter.emit).toHaveBeenCalledWith('helpItem');
    }
  ));
});

包版本:

代码语言:javascript
复制
"@angular/core": "~11.0.3",
"@angular/cli": "~11.0.3",
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68298617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档