iLe*_*ing 3 javascript unit-testing mocha.js sinon angularjs
所以我正在测试一个调用另一个函数的函数,它返回一个promise,SUT看起来像这样:
fn($modal) ->
modalInstance = $modal.open({
controller: 'myCtrl'
size: 'lg'
})
modalInstance.result.then(updateData)
Run Code Online (Sandbox Code Playgroud)
现在如果我需要测试它,我可以从这样的事情开始:
it 'when modal called, results get updated with right data', ->
$modal = {
open: sinon.stub().returns({
result: $q.when([1, 2, 3])
})
}
fn($modal)
Run Code Online (Sandbox Code Playgroud)
然后检查它updatedData是否等于[1,2,3]
但是我还要确保$modal.open已经调用并且正确的参数已经传递给它.我怎么做?
我不仅需要存根方法而且还要监视它,我是否应该模拟整个$modal?你能用正确的语法帮助我吗?
当我做这样的事情时:
mMk = sinon.mock($modal)
mMk.expects('open')
Run Code Online (Sandbox Code Playgroud)
诗乃对我大喊:
TypeError: Attempted to wrap open which is already stubbed
Sinon中的Stubs支持完整的间谍API,因此您可以执行以下操作:
// override $modal
$modal = {
open: sinon.stub().returns({
result: $q.when([1, 2, 3])
});
};
fn($modal);
expect($modal.open).toHaveBeenCalledWith(...);
Run Code Online (Sandbox Code Playgroud)
请注意,如果$modal是可注入服务,那么仅仅存根open方法而不是覆盖整个方法可能更清晰$modal.
// override $modal.open
sinon.stub($modal, 'open').returns({
result: $q.when([1, 2, 3])
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |