Javascript 使用testdouble.js导入的mocha测试模拟/间谍库
我的模块需要一个外部依赖项:导出函数而不是对象Javascript 使用testdouble.js导入的mocha测试模拟/间谍库,javascript,node.js,unit-testing,Javascript,Node.js,Unit Testing,我的模块需要一个外部依赖项:导出函数而不是对象 import download from 'downloadjs' // download is a function 我的职能 单元测试 问题 我尝试模拟/替换downloadjs,以验证它是否使用有效数据调用 td.replace(下载)和td.replace('downloadjs')都不起作用 文档中说您不应该模拟/替换外部库: 那么如何测试这段代码呢?您可以围绕第三方库中存在的功能创建一个包装器(本例中为downloadjs),并使用
import download from 'downloadjs' // download is a function
我的职能
单元测试
问题
我尝试模拟/替换downloadjs
,以验证它是否使用有效数据调用
td.replace(下载)
和td.replace('downloadjs')
都不起作用
文档中说您不应该模拟/替换外部库:
那么如何测试这段代码呢?您可以围绕第三方库中存在的功能创建一个包装器(本例中为downloadjs),并使用
td.replace
模拟包装器
您的职能
var downloadCSV = require('./downloadCSV.js')
module.exports = () => (dispatch, getState) => {
downloadCSV('goats')
}
新包装依赖项
// downloadCSV.js
var download = require('downloadjs')
module.exports = (data) => {
download(data, 'export-result.csv', 'text/csv')
}
单元测试
describe('csv exporter', () => {
var subject, downloadCSV
beforeEach(() => {
downloadCSV = td.replace('../../lib/downloadCSV.js')
subject = require('../../lib/code.js')
})
describe('downloading csv', () => {
it('works', () => {
subject()()
td.verify(downloadCSV('goats'))
})
});
});
注释
subject()
节点
示例文件夹结构来构造这些测试:td,您可能需要调整ES6样式导入的使用。请查看此评论线程以了解更多信息:
谢谢你提供了清晰的例子。因此,包装器是不稳定的(需要集成测试),但对我来说是有意义的:)包装器可以通过使用
td.replace
在隔离/单元测试中进行测试,但是如果您想验证downloadjs
的实际功能,则需要一个更集成的测试,跨越该边界。
// downloadCSV.js
var download = require('downloadjs')
module.exports = (data) => {
download(data, 'export-result.csv', 'text/csv')
}
describe('csv exporter', () => {
var subject, downloadCSV
beforeEach(() => {
downloadCSV = td.replace('../../lib/downloadCSV.js')
subject = require('../../lib/code.js')
})
describe('downloading csv', () => {
it('works', () => {
subject()()
td.verify(downloadCSV('goats'))
})
});
});