gpt4 book ai didi

javascript - 我如何同时 stub 和监视

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:49 26 4
gpt4 key购买 nike

所以我正在测试一个调用另一个函数的函数,它返回一个 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 并将正确的参数传递给它。我该怎么做?

我不仅需要对方法进行 stub ,还需要监视它,我应该模拟整个 $modal 吗?你能用正确的语法帮助我吗?

当我做这样的事情时:

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

诗乃冲我吼道: TypeError: Attempted to wrap open which is already stubbed

最佳答案

Sinon 中的 stub 支持完整的 spy API,所以你可以这样做:

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

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

请注意,如果 $modal 是可注入(inject)服务,则只对 open 方法进行 stub 而不是覆盖整个 $modal 可能会更干净>.

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

关于javascript - 我如何同时 stub 和监视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30852796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com