Node.js 模拟模块NodeJs的实例
如何在正在测试的方法中模拟Node.js 模拟模块NodeJs的实例,node.js,mocking,sinon,Node.js,Mocking,Sinon,如何在正在测试的方法中模拟模块的实例 方法示例: var item = require('item'); // module to mock // underTest.js module.exports = { parse: function(model) { return new item(model).parse(); } } 我想模拟项模块并断言解析方法已被调用 我的测试套件使用sinon和mocha任何实现这一点的示例都将不胜感激。也许您可以通过扩展
模块的实例
方法示例:
var item = require('item'); // module to mock
// underTest.js
module.exports = {
parse: function(model) {
return new item(model).parse();
}
}
我想模拟项
模块并断言解析
方法已被调用
我的测试套件使用sinon
和mocha
任何实现这一点的示例都将不胜感激。也许您可以通过扩展原型来创建一个模拟
// yourmock.js
var item = require("item")
exports = item
exports.parse = function() {
//Override method
}
编辑
举个例子。您有一个请求外部API的NodeJS应用程序。例如,我们必须完成信用卡支付。此支付由payment.js对象完成,其中有一个processPayment
方法。您希望在回调中返回一个布尔值
原始文件可能如下所示:
// payment.js
exports.processPayment = function(credicardNumber, cvc, expiration, callBack) {
// logic here, that requests the Stripe API
// A long time processing and requesting etc.
callback(err, boolean)
}
因为您希望在测试期间处理条带时不会出现问题,所以需要模拟此函数,以便在不延迟请求服务器的情况下使用它
您可以做的是使用相同的功能,但是您接管了请求服务器的功能。因此,在真实环境中,您希望回调带有错误和布尔值,而此模拟将为您提供这一点
// paymentMock.js
var payment = require('./payment');
// exports everything what normally is inside the payment.js functionality
exports = payment
// override the functionality that is requesting the stripe server
exports.processPayment = function(creditCardNumber, cvc, expirationDate, callBack) {
// now just return the callback withouth having any problems with requesting Stripe
callBack(null, true);
}
这对您来说可能更容易理解吗?非常感谢paul,但我对node中的测试比较陌生,请您给我一个如何测试该小方法的示例。你认为正确的方法是覆盖他的默认方法来做出预期吗?Cheerse@Fabrizio我已经编辑了答案,也许你会对我试图向你解释的内容有更多的了解?