我如何同时存根和监视
How do I stub and spy at the same time
所以我正在测试调用另一个函数的函数,returns 一个承诺,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 中的 Stubs 支持完整的 spy 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])
});
所以我正在测试调用另一个函数的函数,returns 一个承诺,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 中的 Stubs 支持完整的 spy 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])
});