Node.js 用testdouble.js替换内部函数?
使用测试时,是否可以替换node.js模块中的内部函数 内部函数由一个DB调用组成,所以我不想测试它。但是,我确实想测试这个函数是否收到了预期的参数 例如,给定node.js模块:Node.js 用testdouble.js替换内部函数?,node.js,unit-testing,testdoublejs,Node.js,Unit Testing,Testdoublejs,使用测试时,是否可以替换node.js模块中的内部函数 内部函数由一个DB调用组成,所以我不想测试它。但是,我确实想测试这个函数是否收到了预期的参数 例如,给定node.js模块: module.exports = { record: recordEvent } recordEvent = (event) => var dbModel = map(event); persist(dbModel); var map = (event) => // some
module.exports = { record: recordEvent }
recordEvent = (event) =>
var dbModel = map(event);
persist(dbModel);
var map = (event) =>
// some code that transforms event to the db specific representation (testable)
var persist = (model) =>
// some SQL insert/update code here (not testable)
下面的测试将检查persist是否获得正确的参数:
recorder = require('event_recorder')
describe 'Event recorder module', ->
it 'converts the event to a db model', ->
var event = {...// mock event };
var model = {...// mock model of the event };
var persist = td.replace(recorder, 'persist')
td.when(persist(model)).thenReturn(true)
result = recorder.record(event)
expected = true;
result.should.be.equal(expected)
但是,测试会抛出一个错误:
td.replace-未找到“persist”属性
我理解它为什么会有这个错误,这是因为persist方法不是公共的。在testdouble中,我还可以如何实现这一点呢?正如您所暗示的,有一个选项是将
持久化
方法公开。另一个选项是让persist
接受或使用另一个函数来执行SQL查询,并将该函数存根:
var executeQuery = td.function()
recorder.recordEvent(event, executeQuery)
td.verify(executeQuery('UPDATE ...'))