2017-10-24 6 views
0

私はクラスAを持っており、私はeventHandlerメソッドをテストしたいと思います。"then"のsinonjsスタブ

class A() { 
    eventHandler (controller) { 
     controller.exec().then((() => { 
      this._afterHandler(); // I can't stub it. 
     })) 
    // this._afterHandler(); // I can stub it !!! 
    } 


    _afterHandler() { 
     xxxxx...; 
    } 
} 

これは私のテストコードです。 _afterHandlerメソッドをスタブすることはできません。その時の方法。しかし、私はメソッドを "then"の外側に移動します。私はそれをスタブすることができます。

it('xxxx',() => { 
     const a = new A(); 
     const stub = sinon.stub(a,'_afterHandler'); 
     a.eventHandler({ exec:() => {return Promise.resolve(1)} }) 

     sinon.assert.calledOnce(stub); 
    }); 

_afterHandlerメソッドをスタブするにはどうすればよいですか?ありがとう~~

答えて

0

_afterHandlerはSinonによってスタブされています。

ここでの問題は、sinon.assert.calledOnce(スタブ)はスタブ_afterHandler前に呼び出さなっていることである - 約束の使用のおかげで。これはテスト可能な作りの面では


、一つの選択肢は次のようである:

class A { 
    eventHandler (controller) { 
    return controller.exec().then(() => { 
     this._afterHandler(); 
    }) 
    } 

    _afterHandler() { 
    xxxxx...; 
    } 
} 

とテスト:

it('xxxx', async() => { 
    const a = new A(); 
    const stub = sinon.stub(a,'_afterHandler'); 
    await a.eventHandler({ exec:() => {return Promise.resolve(1)} }); 

    sinon.assert.calledOnce(stub); 
}); 
関連する問題