如何在JavaScript中存根库函数
例如,如果我在src/lib/a.js中定义了main.js调用a,并且函数a调用node uuid.v1,那么在测试main.js时,我如何存根node uuid.v1 main.js如何在JavaScript中存根库函数,javascript,node.js,testing,mocha.js,sinon,Javascript,Node.js,Testing,Mocha.js,Sinon,例如,如果我在src/lib/a.js中定义了main.js调用a,并且函数a调用node uuid.v1,那么在测试main.js时,我如何存根node uuid.v1 main.js const a = require("./src/lib/a").a const main = () => { return a() } module.exports = main const generateUUID = require("node-uuid").v1 const a = (
const a = require("./src/lib/a").a
const main = () => {
return a()
}
module.exports = main
const generateUUID = require("node-uuid").v1
const a = () => {
let temp = generateUUID()
return temp
}
module.exports = {
a
}
const assert = require("assert")
const main = require("../main")
const sinon = require("sinon")
const uuid = require("node-uuid")
describe('main', () => {
it('should return a newly generated uuid', () => {
sinon.stub(uuid, "v1").returns("121321")
assert.equal(main(), "121321")
})
})
src/lib/a.js
const a = require("./src/lib/a").a
const main = () => {
return a()
}
module.exports = main
const generateUUID = require("node-uuid").v1
const a = () => {
let temp = generateUUID()
return temp
}
module.exports = {
a
}
const assert = require("assert")
const main = require("../main")
const sinon = require("sinon")
const uuid = require("node-uuid")
describe('main', () => {
it('should return a newly generated uuid', () => {
sinon.stub(uuid, "v1").returns("121321")
assert.equal(main(), "121321")
})
})
测试/main test.js
const a = require("./src/lib/a").a
const main = () => {
return a()
}
module.exports = main
const generateUUID = require("node-uuid").v1
const a = () => {
let temp = generateUUID()
return temp
}
module.exports = {
a
}
const assert = require("assert")
const main = require("../main")
const sinon = require("sinon")
const uuid = require("node-uuid")
describe('main', () => {
it('should return a newly generated uuid', () => {
sinon.stub(uuid, "v1").returns("121321")
assert.equal(main(), "121321")
})
})
由于上述测试失败,sinon.stub(…)
语句没有为src/lib/a.js存根uuid.v1
是否有一种全局调用库函数的方法,以便它在被调用时执行指定的行为?在导入主模块之前,您应该配置存根。这样,模块将调用存根而不是原始函数
const assert = require("assert")
const sinon = require("sinon")
const uuid = require("node-uuid")
describe('main', () => {
it('should return a newly generated uuid', () => {
sinon.stub(uuid, "v1").returns("121321")
const main = require("../main")
assert.equal(main(), "121321")
})
})
请记住,节点uuid已被弃用,正如您在本警告中看到的那样 [不推荐使用警告:不推荐使用require('uuid'),并且 此模块的3.x版之后将不受支持。请改用 要求('uuid/[v1 | v3 | v4 | v5]'),如下例所示。] 关于如何将其存根以进行测试将比以前更加困难,因为实际上没有一种简单的方法可以使用sinon模拟独立函数 创建自定义模块
//custom uuid
module.exports.v1 = require('uuid/v1');
需要项目中自定义模块的uuid
const uuid = require('<path_to_custom_module>');
Sinon.stub(uuid, 'v1').returns('12345');
const uuid=require(“”);
Sinon.stub(uuid,'v1')。返回('12345');
如果为了编写合理的测试,您必须存根一些代码,我建议您只存根直接依赖项。其他任何东西都会过度增加耦合。