【发布时间】:2016-09-21 05:07:29
【问题描述】:
我的模块需要一个外部依赖项:downloadjs 导出一个函数而不是对象
import download from 'downloadjs' // download is a function
我的功能
const onExport = () => (dispatch, getState) => {
let data = getState().get('data')
let csv = mapDataToCsv(data)
download(csv, "export-result.csv", "text/csv");
// dispatch something else
}
单元测试
import download from 'downloadjs'
import td from 'testdouble'
// test case
it('unparse JSON to CSV', () => {
td.replace('downloadjs') // no this doesn't work
let store = createStore(reducer, initialState, middleware);
store.dispatch(target.onExport()); // action calls
let expected = td.matchers.contains('FOO,SUCCESS')
// error it calls real download function not mock
td.verify(download(expected, "export-result.csv", "text/csv"))
td.reset()
})
问题
我尝试模拟/替换 downloadjs 以验证它是否使用有效数据调用。
td.replace(download) 和 td.replace('downloadjs') 都不起作用
文档说你不应该模拟/替换外部库:
Why doesn't td.replace() work with external CommonJS modules?
那我该如何测试这段代码呢?
【问题讨论】:
标签: javascript node.js unit-testing