我试图测试一个Angular组件的setter会使用Sinon引发错误。我的组件看起来像这样:
@Input( 'sceneMode' ) set sceneMode( newSceneMode: Cesium.SceneMode ) {
const scene = this.cesiumViewerService.getScene();
switch ( newSceneMode ) {
case Cesium.SceneMode.SCENE2D:
scene.morphTo2D( MORPH_DURATION );
break;
case Cesium.SceneMode.SCENE3D:
scene.morphTo3D( MORPH_DURATION );
break;
case Cesium.SceneMode.COLUMBUS_VIEW:
scene.morphToColumbusView( MORPH_DURATION );
break;
default:
throw new Error( `Cannot morph to SceneMode type ${newSceneMode}` );
}
}
我的测试看起来像这样:
it( 'should throw an error on invalid scene mode', () => {
sceneModeStub = sinon.stub( component, 'sceneMode' );
try {
sceneModeStub.sceneMode = 0;
} finally {
assert( sceneModeStub.threw() );
}
} );
我试过将assert移到finally块之外。我也尝试过使用:
sceneModeStub = sinon.sandbox.stub( component, 'sceneMode' );
但是Karma报道:
AssertionError:false == true
我确定0
是无效的sceneMode
,事实上如果我删除了try / finally,应用程序会在组件的setter中抛出错误。
我该如何测试?
答案 0 :(得分:0)
旧问题,但仍需回答。
在我看来,您正在存根要测试的方法,这是错误的。您要测试的方法应始终保持原始形式,仅存根依赖项。
在测试异常时,应将一个函数传递给sinon,该函数可以调用该函数以引发异常。这应该可行:
it( 'should throw an error on invalid scene mode', () => {
assert.threw( () => {
sceneModeStub.sceneMode = 0;
}, 'Cannot morph to SceneMode type 0')
} );