Javascript 模拟Sinon中的Node.js模块仍然调用实际模块
我开始为我正在编写的node.js服务器编写测试。我正在测试这个函数Javascript 模拟Sinon中的Node.js模块仍然调用实际模块,javascript,node.js,unit-testing,testing,Javascript,Node.js,Unit Testing,Testing,我开始为我正在编写的node.js服务器编写测试。我正在测试这个函数 exports.get_device_states = function (body, master_callback) { var state = new State(body[State.id_key]); console.log("STATE: "); console.log(state); mysqlDao.get_device_states_for_group(state, func
exports.get_device_states = function (body, master_callback) {
var state = new State(body[State.id_key]);
console.log("STATE: ");
console.log(state);
mysqlDao.get_device_states_for_group(state, function(err, result) {
var resp_json = {
'error': err,
'stateList': result
}
master_callback(resp_json);
});
}
我需要模拟我用来读/写数据库的“mysqlDao”模块。但我无法做到这一点。每当我尝试的时候。我仍然得到了实际的数据库结果
messagesTest.js
var sandbox = sinon.sandbox.create();
var stubbedDao = {
get_device_states_for_group: sandbox.stub().returns("STUBBED")
}
但不是像我希望的那样返回“存根”。它只返回数据库结果。对于读取函数来说这不是一个大问题,但我需要它来工作,这样我就不会在其他测试中修改db
谢谢,
A.L你能在你的服务器代码中发布你如何要求和实例化
mysqlDao
吗?你能在你的服务器代码中发布你如何要求和实例化mysqlDao
吗?
describe('messages', function() {
before(function() {
mockery.enable();
});
beforeEach(function() {
mockery.registerAllowable('async');
mockery.registerAllowable('../models/State');
mockery.registerAllowable('../models/Message');
mockery.registerMock('../dao/gcmdao', stubbedDao);
messages = require('../business/messages.js');
});
afterEach(function() {
sandbox.verifyAndRestore();
mockery.deregisterAll();
});
after(function() {
mockery.disable();
});
describe('get_device_state', function () {
it('isNormal', function () {
var body = {
"STATE_ID": testData.state_one
}
stubbedDao.get_device_states_for_group.yields();
messages.get_device_states(body, function(resp) {
console.log("returns");
assert(stubbedDao.get_device_states_for_group.calledOnce);
console.log(resp);
})
});
});
});