web-dev-qa-db-ja.com

spyOnは、start()のためにスパイするオブジェクトを見つけることができませんでした

Angular-cliテストフレームワークを使用しています。

コンポーネント内で、「ng2-slim-loading-bar」ノードモジュールを使用しました。

submit(){
    this._slimLoadingBarService.start(() => {
    });
    //method operations
}

このコンポーネントをテストするときに、spyOnこのサービスを次のように適用しました。

beforeEach(() => {
    let slimLoadingBarService=new SlimLoadingBarService();
    demoComponent = new DemoComponent(slimLoadingBarService);
    TestBed.configureTestingModule({
        declarations: [
            DemoComponent
        ],
        providers: [
            { provide: SlimLoadingBarService, useClass: SlimLoadingBarService}
        ],
        imports: [
            SharedModule
        ]
    });
});
it('should pass data to servie', () => {
    spyOn(slimLoadingBarService,'start').and.callThrough();
   //testing code,if I remove the above service from my component, test runs fine
});

しかし、機能していません。

以下のエラーがスローされます:

spyOnは、start()のためにスパイするオブジェクトを見つけることができませんでした

8
Bhushan Gadekar

LetでslimLoadingBarServiceを宣言すると、そのスコープはbeforeEachコールバックスコープに制限されます。 varで宣言するか、適切なdescribe()ブロックの後に宣言し、beforeEachコールバック関数内でコンテンツを設定します。

describe("some describe statement" , function(){
    let slimLoadingBarService = null;

    beforeEach( () => {
        slimLoadingBarService=new SlimLoadingBarService();

    });

    it('should pass data to service', () => {
        spyOn(slimLoadingBarService,'start').and.callThrough();
       //testing code,if I remove the above service from my component, test runs fine
    });
});
6
Sergeon

beforeEachで宣言されていないためです

beforeEach(()=>{
 slimLoadingBarService=TestBed.get(SlimLoadingBarService);
}
2
nirmal