单元测试:如何存根包装函数
Unit testing: how to stub a wrapper function
我是单元测试的新手,正在尝试弄清楚如何存根包装函数。我正在使用 Sinon/Mocha.
如果我有这样的函数:
const user = await User.findOne({ email: email });
我已经能够像这样存根了:
const userFindOneStub = sandbox.stub(User, 'findOne')
.returns({
_id: 'userId1234',
companies: [
{
_id: 'companyId1234'
}
]
});
但我不得不为我的函数创建一个包装器,以便使用 Lodash 为特定函数重新排序参数:
const userWrapper = _.rearg(UserFunction, [0, 1, 2, 3, 5, 4]);
const res = await userWrapper(someargs);
我可以存根 UserFunction
调用,但我如何在单元测试中存根 userWrapper
调用?
通过将 userWrapper 保存为一个模块并遵循 Sinon How to Stub Dependency.
例如你可以创建userWrapper.js来喜欢这个。
// File: userWrapper.js
// This is just sample
const userWrapper = () => {
// In your case is: _.rearg(UserFunction, [0, 1, 2, 3, 5, 4]);
console.log('real');
}
module.exports = { userWrapper };
然后你就可以在你的主js中使用它来点赞了
// File: main.js
const wrapper = require('./userWrapper.js');
module.exports = async function main () {
// In your case: const res = await userWrapper();
wrapper.userWrapper();
}
最后是测试文件。
// File: test.js
const sinon = require('sinon');
const wrapper = require('./userWrapper.js');
const main = require('./main.js');
it('Stub userWrapper', () => {
const stub = sinon.stub(wrapper, 'userWrapper').callsFake(() => {
console.log('fake');
});
main();
sinon.assert.calledOnce(stub);
});
当你运行它使用来自终端的 mocha 时:
$ npx mocha test.js
fake
✓ Stub userWrapper
1 passing (3ms)
我是单元测试的新手,正在尝试弄清楚如何存根包装函数。我正在使用 Sinon/Mocha.
如果我有这样的函数:
const user = await User.findOne({ email: email });
我已经能够像这样存根了:
const userFindOneStub = sandbox.stub(User, 'findOne')
.returns({
_id: 'userId1234',
companies: [
{
_id: 'companyId1234'
}
]
});
但我不得不为我的函数创建一个包装器,以便使用 Lodash 为特定函数重新排序参数:
const userWrapper = _.rearg(UserFunction, [0, 1, 2, 3, 5, 4]);
const res = await userWrapper(someargs);
我可以存根 UserFunction
调用,但我如何在单元测试中存根 userWrapper
调用?
通过将 userWrapper 保存为一个模块并遵循 Sinon How to Stub Dependency.
例如你可以创建userWrapper.js来喜欢这个。
// File: userWrapper.js
// This is just sample
const userWrapper = () => {
// In your case is: _.rearg(UserFunction, [0, 1, 2, 3, 5, 4]);
console.log('real');
}
module.exports = { userWrapper };
然后你就可以在你的主js中使用它来点赞了
// File: main.js
const wrapper = require('./userWrapper.js');
module.exports = async function main () {
// In your case: const res = await userWrapper();
wrapper.userWrapper();
}
最后是测试文件。
// File: test.js
const sinon = require('sinon');
const wrapper = require('./userWrapper.js');
const main = require('./main.js');
it('Stub userWrapper', () => {
const stub = sinon.stub(wrapper, 'userWrapper').callsFake(() => {
console.log('fake');
});
main();
sinon.assert.calledOnce(stub);
});
当你运行它使用来自终端的 mocha 时:
$ npx mocha test.js
fake
✓ Stub userWrapper
1 passing (3ms)