【问题标题】:Angular how to test subscription from EventEmitter in ComponentAngular如何测试组件中EventEmitter的订阅
【发布时间】:2021-09-21 08:54:03
【问题描述】:

我的组件中有以下订阅:

finishLanguageChange 在我的一项服务中是 EventEmitter

  ngOnInit(): void {
    // Update dates on Language change
    this.refs.translateRef = 
      this.languageManagerService.finishLanguageChange.subscribe((event) => {
      this.langCode = this.languageManagerService.getLangCode();
      this.cdRef.detectChanges();
    });
  }

并且我想返回该订阅的值以测试代码。

我试试这个,但不幸的是,它需要返回订阅类型,我不知道该怎么做

  it('Check Date config', async(() => {
    spyOn(languageManagerService.finishLanguageChange, 'subscribe').and.returnValue(true);
     fixture.detectChanges();

    expect(component.langCode)..toBeTruthy();
  }));

【问题讨论】:

    标签: angular unit-testing testing


    【解决方案1】:

    您应该创建服务的模拟间谍对象。

    
    let languageManagerServiceSpy: jasmine.SpyObj<LanguageManagerService>;
    
    beforeEach(() => {
      const spy = 
      TestBed.configureTestingModule({
        // Provide spy dependency
        providers: [
          // other providers
          { provide: LanguageManagerService, useValue: jasmine.createSpyObj('LanguageManagerService', ['finishLanguageChange', 'getLangCode'])}
        ]
      });
    
      // Inject spy dependency
      languageManagerServiceSpy = TestBed.inject(LanguageManagerService) as jasmine.SpyObj<LanguageManagerService>;
    });
    

    测试用例:

    
    it('Check Date config', () => {
        
      languageManagerServiceSpy.finishLanguageChange.and.returnValue(of("test"));
        languageManagerServiceSpy.getLangCode.and.returnValue("test");
         fixture.detectChanges();
    
        expect(component.langCode)..toBeTruthy();
    });
    
    

    【讨论】:

    • languageManagerServiceSpy.finishLanguageChange.and.returnValue(of("test"));这不起作用错误是:类型'EventEmitter'上不存在属性'and'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2020-02-28
    • 2021-06-22
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多