使用testdouble.js进行测试时,是否可以td.replace
node.js模块中的内部函数?
内部函数由DB调用组成,所以我不想测试它。但我想测试这个函数是否收到了预期的参数。
例如,给定node.js模块:
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)
以下测试,检查持久性是否得到正确的参数:
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 - 未找到“持久”属性
我理解为什么会出现这个错误,因为持久化方法不公开。我怎样才能在testdouble中实现这个目标?
答案 0 :(得分:1)
正如您所暗示的那样,一个选项是公开persist
方法。另一个选择是persist
接受或使用另一个函数来执行SQL查询,而 函数的存根
var executeQuery = td.function()
recorder.recordEvent(event, executeQuery)
td.verify(executeQuery('UPDATE ...'))