Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Node.js所需的模块需要存根/模拟时,编写mocha单元测试的最佳方法是什么?_Node.js_Unit Testing_Mocha.js - Fatal编程技术网

当Node.js所需的模块需要存根/模拟时,编写mocha单元测试的最佳方法是什么?

当Node.js所需的模块需要存根/模拟时,编写mocha单元测试的最佳方法是什么?,node.js,unit-testing,mocha.js,Node.js,Unit Testing,Mocha.js,我曾尝试使用Sinon、proxyquire和mockery等库,但都没有成功 另外,require(‘王朝’)(config)是什么意思?我知道它正在传递存储在变量config中的值,但是有没有其他方法来实现这一点,或者在使用某个测试库时传递此值?如果您的模块有构造函数,或者您可以这样做,并将模块作为构造函数参数,以便将其注入测试中,您可以在测试中提供一个模块的存根/模拟实现。单独使用该代码是不寻常的。您通常会使用某种服务包装器,可能是这样的: var config = require('..

我曾尝试使用Sinon、proxyquire和mockery等库,但都没有成功


另外,require(‘王朝’)(config)是什么意思?我知道它正在传递存储在变量config中的值,但是有没有其他方法来实现这一点,或者在使用某个测试库时传递此值?

如果您的模块有构造函数,或者您可以这样做,并将模块作为构造函数参数,以便将其注入测试中,您可以在测试中提供一个模块的存根/模拟实现。

单独使用该代码是不寻常的。您通常会使用某种服务包装器,可能是这样的:

var config = require('../config/config');
var dynasty = require('dynasty')(config);

dynasty.list('name').then(function(resp) {
    console.log(resp);
});
function MyService(db) {
  this._db = db;
}

MyService.prototype.getList = function (name) {
  return db.list(name);
}

module.exports = MyService;
现在您可以编写一个单元测试,它可以如下所示:

var config = require('../config/config');
var dynasty = require('dynasty')(config);

dynasty.list('name').then(function(resp) {
    console.log(resp);
});
function MyService(db) {
  this._db = db;
}

MyService.prototype.getList = function (name) {
  return db.list(name);
}

module.exports = MyService;
您可以使用单元测试来测试服务中的逻辑

您还需要在单独的文件中编写一个集成测试,该文件使用数据库连接器的真实实例

这有用吗