Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何测试处理局部变量并返回可观测值的角度服务方法?_Angular_Unit Testing_Angular Services - Fatal编程技术网

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();
        });
    });
});