【发布时间】:2016-07-02 17:21:06
【问题描述】:
我一直在构建一个节点模块,它封装了对 GitHub API 的大量调用,并且在我无限的智慧中使用了显示模块模式构建了它,使我的封装函数保持私有并且只公开简单的方法。请看下面的例子:
github.shortcuts = (function(){
var appPath;
var createRepo = function(name){
var deferred = Q.defer();
github.repos.create({
name: name,
auto_init: true
}, function(error, result){
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(result);
}
});
return deferred.promise;
};
var updateRef = function(result){
var deferred = Q.defer();
var user = result.user;
var repo = result.repo;
github.gitdata.updateReference({
user: user,
repo: repo,
ref: 'heads/master',
sha: result.sha
}, function(error, result){
if (error) {
deferred.reject(new Error(error));
} else {
deferred.resolve(result);
}
});
return deferred.promise;
};
return {
init: function(token, name, path){
var deferred = Q.defer();
appPath = path;
var error = function(error){
return deferred.reject(error);
};
github.authenticate({
type: "oauth",
token: token
});
createRepo(name)
.then(updateRef, error)
.then(function(result){
deferred.resolve(result);
}, error);
return deferred.promise;
}
};
})();
但是为此编写单元测试给我带来了问题。我不想测试我的私有函数,只测试公共函数init(),但是我想存根私有函数,以便测试不会调用 GitHub API。我使用 Mocha 和 Chai 进行测试,使用 Sinon 进行间谍/存根。
任何关于如何存根这些函数的建议,或者如果这是一个不好的模式,我应该如何测试这个模块将不胜感激!
【问题讨论】:
标签: javascript node.js unit-testing mocha.js sinon