我有一个私人Subject
attributeNameSubject 。有一个 setAttributeName 方法,该方法将字符串值传递给主题。我们使用 getAttributeName 来引用该主题。我正在尝试测试上面的代码,但是我总是得到 false-positive ,即测试通过了,但是我得到了 test没有期望警告。事实证明,它根本没有调用subscribe方法。
我正在Angular 7中测试此代码。
private readonly attributeNameSubject = new Subject<string>();
get getAttributeName(): Subject<string> {
return this.attributeNameSubject;
}
setAttributeName(value: any) {
this.getAttributeName.next(value.attributeName);
}
it('should set attribute name on valid input', () => {
service = TestBed.get(AttributeService);
service.setAttributeName('some random string');
service.getAttributeName.subscribe((data: string) => {
expect(data).toEqual('some random string');
});
});
答案 0 :(得分:2)
您的代码有两个问题。
setAttributeName
将值发送给订阅者,而getAttributeName
则监听可观察的对象。因此,当您调用setAttributeName
时,getAttributeName
会发出一个值,但没有预订。因此,您应该首先订阅getAttributeName
,然后调用setAttributeName
发出该值。getAttributeName
发出value.attributeName
。您需要改为传递一个对象。这是有效的测试用例。
it('should set attribute name on valid input', () => {
service = TestBed.get(AttributeService);
service.getAttributeName.subscribe((data: string) => {
expect(data).toEqual('some random string');
});
service.setAttributeName({ attributeName: 'some random string' });
});