Javascript 角度-单元测试主题()?
我有一个角度服务,只使用一个主题,但我不确定如何为它编写单元测试 我看到了[这条线索][1],但我觉得它没有太大帮助Javascript 角度-单元测试主题()?,javascript,angular,typescript,testing,karma-runner,Javascript,Angular,Typescript,Testing,Karma Runner,我有一个角度服务,只使用一个主题,但我不确定如何为它编写单元测试 我看到了[这条线索][1],但我觉得它没有太大帮助 我试图模仿next(),但我有点迷路了。你应该监视service.servicemg而不是service,因为next()方法似乎在servicemg主题上 it('should catch what is emitted', () => { const nextSpy = spyOn(service.serviceMsg, 'next'); service
我试图模仿
next()
,但我有点迷路了。你应该监视service.servicemg
而不是service
,因为next()
方法似乎在servicemg
主题上
it('should catch what is emitted', () => {
const nextSpy = spyOn(service.serviceMsg, 'next');
service.confirm(ACTION);
expect(nextSpy).toHaveBeenCalled();
});
编辑:
您还应该更改创建服务
实例的方式。您在代码中显示的内容仅适用于组件
实例创建
beforeEach(() => {
TestBed.configureTestingModule({
providers: [MessageService]
});
service = TestBed.get(MessageService); // get service instance
httpMock = TestBed.get(HttpTestingController);
});
首先,您可以订阅您的
主题,并在内部期望一些值,然后执行方法,该方法将发出:
it('should catch what is emitted', () => {
service.serviceMsg.subscribe(msg => {
expect(msg).toEqual(something);
});
service.confirm(value); // this should match what you expect above
});
通过这样做,您依赖于Subject
的实现,而这不是单元测试应该做的。我相信这不是单元测试,因为它包括创建模块或注入之类的内容。确实,它将依赖于主题实现。我明白你的意思。尽管我收到了错误:错误:非法状态:无法加载指令MessageService的摘要。
@trichetriche-您是否了解此问题?您无法创建服务
实例,如fixture=TestBed.createComponent(MessageService);服务=fixture.componentInstance代码>。这仅适用于组件。相反,你应该做service=TestBed.get(MessageService)
啊,太棒了!谢谢你的帮助@Amit:-)@physicsboy如果你想通知我,必须是我已经评论过的问题/答案,否则我不会收到通知!