繁体   English   中英

我如何同时存根和监视

[英]How do I stub and spy at the same time

所以我正在测试一个调用另一个函数的函数,该函数返回一个Promise,SUT看起来像这样:

fn($modal) -> 
    modalInstance = $modal.open({
       controller: 'myCtrl'
       size: 'lg'
     })

    modalInstance.result.then(updateData)

现在,如果我需要测试,可以从以下内容开始:

it 'when modal called, results get updated with right data', ->

   $modal = {
      open: sinon.stub().returns({ 
          result: $q.when([1, 2, 3]) 
      })
   }

   fn($modal)

然后检查updatedData是否等于[1,2,3]

但我还要确保已调用$modal.open并将正确的参数传递给它。 我怎么做?

我不仅需要添加方法,还需要监视它,我应该模拟整个$modal吗? 您能以正确的语法帮助我吗?

当我做这样的事情:

mMk  = sinon.mock($modal)
mMk.expects('open')

锡诺对我大吼: TypeError: Attempted to wrap open which is already stubbed

Sinon中的存根支持完整的间谍API,因此您可以执行以下操作:

// override $modal
$modal = {
    open: sinon.stub().returns({
        result: $q.when([1, 2, 3])
    });
};

fn($modal);
expect($modal.open).toHaveBeenCalledWith(...);

请注意,如果$modal是可注入服务,则仅对open方法进行存根而不是覆盖整个$modal可能会更干净。

// override $modal.open
sinon.stub($modal, 'open').returns({
    result: $q.when([1, 2, 3])
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM