gpt4 book ai didi

node.js - 如何使用 Jest 测试和模拟 Nodejs 函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:37 28 4
gpt4 key购买 nike

我想测试一个功能。这个函数还需要其他函数,但是这个其他函数将被 Jest 所 mock 。

这是我的函数

translate(args, cb) {
const transid = args.transid;
const language = args.language;
const defaultValue = args.defaultValue || '';

if (transid === null || transid === '') {
return cb(new Error('Error. Need TransiD'));
}
if (language === null || language === '') {
return cb(new Error('Error. Need language'));
}

return this.translation(transid, language, defaultValue)
.then((res) => {
return cb(null, res);
});
}

该函数需要函数“翻译”。在测试过程中,我会 mock 它。

这是我的测试函数

describe('Translator', () => {
describe('translate', () => {

it('Should return translated value', (done) => {
const args = {
transid: 1,
language: 'EN',
defaultValue: 'defaultValue',
}
const cb = jest.fn((err, res) => {

});
translator.translation = jest.fn((transid, language, defaultValue) => {
// done();
})

translator.translate(args, cb);
done();
});
})
})

我仍然困惑如何使用 Jest 测试该函数并模拟所需的依赖项。

最佳答案

我可以看到一些事情:

  • 您可以通过返回 Promise 链来避免使用 Jest 的 done 函数,Jest 将使用该链来确定测试何时完成。
  • 您不需要模拟函数的实现,只需模拟它们的返回值即可。您可能想要创建一个额外的测试来模拟实现行为,但最好从控制其输出开始。

测试可能如下所示:

describe('Translator', () => {
describe('translate', () => {
it('Should return translated value', () => {
const args = {
transid: 1,
language: 'EN',
defaultValue: 'defaultValue',
}

const cb = jest.fn();

const res = {};

translator.translation = jest.fn()
.mockReturnValue(Promise.resolve(res));

return translator.translate(args, cb)
.then(() => {
expect(translator.translation).toHaveBeenCalledTimes(1);
expect(translator.translation)
.toHaveBeenCalledWith(1, 'EN', 'defaultValue');

expect(cb).toHaveBeenCalledTimes(1);
expect(cb).toHaveBeenCalledWith(null, res);
});
});
})
})

关于node.js - 如何使用 Jest 测试和模拟 Nodejs 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43626133/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com