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我已经编辑了答案,也许你会对我试图向你解释的内容有更多的了解?