存根返回承诺的私有函数



我是前端测试的新手,并且在进行特定测试时遇到了一些麻烦。我正在使用摩卡,西农和柴。

基本上,我有一些想要测试的私人功能。我不想将它们暴露给 API,所以我试图使用 Sinon 来模拟函数。

其中一个私有函数返回一个承诺,其结构大致如下:

myPrivateFunc(arg1, arg2).done(function(x) {
if (x.length > 0) {
// do something
} else {
// call some other private function 
}
});

我试图通过做这样的事情来存根它:

sinon.stub(object, 'myPrivateFunction').withArgs(args1, args2);

当我在测试中调用公共函数时,私有函数被正确调用,但当然最终会失败:

TypeError: Cannot read property 'done' of undefined

我试着弄乱.returns()但我根本不确定我在做什么。

谁能指出我正确的方向?我看过其他类似的问题,但找不到合适的答案。

您确实可以使用.returns来指定 sub 应返回的值。该值应具有done属性。

可能您正在使用jQuery或类似的延迟对象(例如由$.ajax返回),它公开了一个done方法(这不是promises的标准方法:then会是更好的选择)。如果确实是你使用的,你可以为存根的返回值创建一个虚拟的延迟对象:

sinon.stub(object, 'myPrivateFunction')
.withArgs(args1, args2)
.returns($.Deferred().resolve([1,2,3])); 

[1,2,3]替换为您希望x的任何值。

否则,您始终可以创建具有done方法的普通对象:

sinon.stub(object, 'myPrivateFunction')
.withArgs(args1, args2)
.returns( { done: x => [1,2,3] } ); 

最新更新