如何存根茉莉花模拟对象的方法?

根据茉莉花文档,模拟可以像这样创build:

jasmine.createSpyObj(someObject, ['method1', 'method2', ... ]); 

你如何保留这些方法之一? 例如,如果你想testing一个方法抛出一个exception时会发生什么,你将如何做?

您必须将method1method2为EricG评论的,但不能与2.0版中的andCallThrough() (或and.callThrough() )一起使用。 它将委托给真正的实施

在这种情况下,您需要使用和and.callFake()并传递您想要调用的函数(可以抛出exception或任何您想要的):

 var someObject = jasmine.createSpyObj('someObject', [ 'method1', 'method2' ]); someObject.method1.and.callFake(function() { throw 'an-exception'; }); 

然后你可以validation:

 expect(yourFncCallingMethod1).toThrow('an-exception'); 

如果您使用的是打字稿,将该方法作为Jasmine.Spy进行投射会Jasmine.Spy 。 在上面的答案(奇怪,我没有代表征求意见):

 (someObject.method1 as Jasmine.Spy).and.callFake(function() { throw 'an-exception'; });