我想测试一个功能。这个函数也需要其他函数,但是这个函数将用jest进行模拟。
这是我的功能
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);
});
}
该功能需要功能'翻译'。在测试过程中,我会嘲笑它。
这是我的测试功能
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测试该函数以及模拟所需的依赖项。
答案 0 :(得分:0)
我可以看到几件事:
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);
});
});
})
})