Angular 如何测试处理局部变量并返回可观测值的角度服务方法?
假设这样的服务:Angular 如何测试处理局部变量并返回可观测值的角度服务方法?,angular,unit-testing,angular-services,Angular,Unit Testing,Angular Services,假设这样的服务: @Injectable() export class PageNavService { private _expanded = true; private pageNavExpanded = new Subject<any>(); public togglePageNav(): void { this._expanded = !this._expanded this.pageNavExpanded.next(
@Injectable()
export class PageNavService {
private _expanded = true;
private pageNavExpanded = new Subject<any>();
public togglePageNav(): void {
this._expanded = !this._expanded
this.pageNavExpanded.next(this._expanded);
}
public setPageNavState(expanded) {
this._expanded = expanded;
this.pageNavExpanded.next(this._expanded);
}
public getPageNavState(): Observable<any> {
return this.pageNavExpanded.asObservable();
}
constructor() { }
}
但是,由于以下原因,测试失败:
期望虚假成为真实
您应该调用方法
getPageNavState()
service.getPageNavState().subscribe((s) => {
state = s;
});
因为您的初始状态为
true
,所以测试无法成功,让我解释一下
describe('PageNavService', () => {
let service;
let state;
beforeEach(() => TestBed.configureTestingModule({
providers: [PageNavService]
}));
beforeEach(inject([PageNavService], svc => {
service = svc;
//At this moment, the state inside the service is true
service.getPageNavState().subscribe((s) => {
state = s;
});
}));
describe('togglePageNav method', () => {
it('should reverse the navbar state', () => {
//Toggle will change the state from its initial state to an opposite one, making it false
service.togglePageNav();
//The test fails because the state is now false.
expect(state).toBeTruthy();
});
});
});
您可以将初始状态(
private\u expanded
)更改为false
,也可以将测试更改为期望false
,因为这是您目前应该得到的结果。getPageNavState
是一个方法,您必须调用它(service.getPageNavState()
而不是服务。getPageNavState
)谢谢,这解决了语法错误,但测试仍然失败,就像未返回可观察对象一样。谢谢您的语法修复,但测试仍然失败。好像它没有被观察到,你是对的。一旦我解决了别人指出的语法错误,并且删除了前面的expect()。非常感谢。
describe('PageNavService', () => {
let service;
let state;
beforeEach(() => TestBed.configureTestingModule({
providers: [PageNavService]
}));
beforeEach(inject([PageNavService], svc => {
service = svc;
//At this moment, the state inside the service is true
service.getPageNavState().subscribe((s) => {
state = s;
});
}));
describe('togglePageNav method', () => {
it('should reverse the navbar state', () => {
//Toggle will change the state from its initial state to an opposite one, making it false
service.togglePageNav();
//The test fails because the state is now false.
expect(state).toBeTruthy();
});
});
});