加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试Angular 2服务主题

发布时间:2020-12-17 17:23:24 所属栏目:安全 来源:网络整理
导读:我正在尝试为角度服务编写测试,该服务具有Subject属性和在该主题上调用.next()的方法. 该服务如下: @Injectable()export class SubjectService { serviceSubjectProperty$: Subjectany = new Subject(); callNextOnSubject(data: any) { this.serviceSubjec
我正在尝试为角度服务编写测试,该服务具有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’,那么什么都不会“捕获”该事件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读