gpt4 book ai didi

javascript - 内部对象函数的 SinonJS calledOnce 或 callCount 问题

转载 作者:行者123 更新时间:2023-11-28 21:23:51 27 4
gpt4 key购买 nike

使用 SinonJS 3 运行测试我遇到了以下问题

测试有什么问题?

var creator = (function() {

var createIfNotExists = function createIfNotExists() {
_doCreate();
};

var _doCreate = function _doCreate() {
console.log('_doCreate was called');
};

return {
createIfNotExists:createIfNotExists,
_doCreate:_doCreate
};
}());

var util = {
createIfNotExists:creator.createIfNotExists,
_doCreate:creator._doCreate
};

var spyRequester = sinon.spy(util, '_doCreate');
util.createIfNotExists();

console.log(spyRequester.callCount); // prints 0 (should be

console.log(spyRequester.callCount);应该打印 1 但它打印 0

https://codepen.io/thiagoh/pen/XaxBjr?editors=1011

最佳答案

您当前的 createIfNotExists 实现正在调用在其范围内捕获的 _doCreate。如果你想让它运行你的模拟,你应该以某种方式使这个函数之间的“链接”动态化。在您的特定情况下,使用 this._doCreate 应该可以。但如果使用不正确的上下文调用,它会使您的 createIfNotExists 失败。

var creator = (function() {

var createIfNotExists = function createIfNotExists() {
// pick _doCreate from the context or use default.
(this._doCreate || _doCreate)();
};

var _doCreate = function _doCreate() {
console.log('_doCreate was called');
};

return {
createIfNotExists:createIfNotExists,
_doCreate:_doCreate
};
}());

var util = {
createIfNotExists:creator.createIfNotExists,
_doCreate:creator._doCreate
};

var spyRequester = sinon.spy(util, '_doCreate');
util.createIfNotExists();

console.log(spyRequester.callCount); // prints 1
<script src="https://unpkg.com/sinon@3.2.1/pkg/sinon-3.2.1.js"></script>

关于javascript - 内部对象函数的 SinonJS calledOnce 或 callCount 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45926244/

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