单元测试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’,那么什么都不会“捕获”该事件. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |