单元测试Angular 2服务主题

前端之家收集整理的这篇文章主要介绍了单元测试Angular 2服务主题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为角度服务编写测试,该服务具有Subject属性和在该主题调用.next()的方法.

该服务如下:

@Injectable()
export class SubjectService {
  serviceSubjectProperty$: Subject<any> = new Subject();

  callNextOnSubject(data: any) {
    this.serviceSubjectProperty$.next(data);
  }
}

以及该服务的测试文件

import { TestBed,inject } from '@angular/core/testing';

import { SubjectService } from './subject.service';

describe('SubjectService',() => {

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [
        SubjectService
      ]
    });
  });

  it('callNextOnSubject() should emit data to serviceSubjectProperty$Subject',inject([SubjectService],(subjectService) => {
      subjectService.callNextOnSubject('test');

      subjectServiceProperty$.subscribe((message) => {
        expect(message).toBe('test');
      })
  }));
});

如果我将subjectService.callNextOnSubject的参数从’test’更改为其他任何内容,则测试总是传递事件.

我也尝试用async和fakeAsync包装所有内容,但结果是一样的.

测试callNextOnSubject是否向serviceSubjectProperty $Subject发送数据的正确方法是什么?

解决方法

我在搜索解决方案时发现了这篇文章

http://www.syntaxsuccess.com/viewarticle/unit-testing-eventemitter-in-angular-2.0

它对我来说效果很好(它很短,不要害怕打开它).

我在这里粘贴它,所以它可能会帮助那些来到这个网站寻找答案的人.

关于提出的问题 – 我认为你需要改变:

subjectService.callNextOnSubject('test');

  subjectServiceProperty$.subscribe((message) => {
    expect(message).toBe('test');
  })

subjectServiceProperty$.subscribe((message) => {
    expect(message).toBe('test');
  })

  subjectService.callNextOnSubject('test');

,所以先订阅,然后发出一个事件.

如果您在订阅之前发出’test’,那么什么都不会“捕获”该事件.

猜你在找的Angularjs相关文章