Как написать модульный тест для выявления шаблонов модулей Javascript с помощью Jest?
Например: мой math_util.js
var MathUtil = function(){
function add(a,b){
return a + b;
}
return {
add: add
};
}
Я буду использовать Jest для тестирования add(). Так я напишу
test('add', ()=>{
expect(MathUtil().add(1,1)).toBe(2);
});
Но я получаю MathUtil
не определено или MathUtil()
это не функция.
Я также пытался использовать require()
или же import
, Но MathUtil
не имеет module.export
или же export
,
Итак, как написать модульный тест для javascript, раскрывающий шаблон модуля с помощью Jest?
Примечание. У меня есть проект, в котором все сценарии написаны с использованием шаблона модуля, поэтому преобразование всех в модуль ES2015 может оказаться непрактичным.
2 ответа
Если вы действительно хотите проверить math_util.js
именно так, как написано, вы можете сделать это:
// ---- math_util.test.js ----
const fs = require('fs');
const path = require('path');
const vm = require('vm');
const code = fs.readFileSync(path.join(__dirname, '/math_util.js'), 'utf-8');
const MathUtil = vm.runInThisContext(code + '; MathUtil');
test('add', ()=>{
expect(MathUtil().add(1,1)).toBe(2);
});
... но передовой практикой будет рефакторинг кода в модули. Для раскрытия шаблона модуля, который должен быть очень простым процессом, просто удалите внешнюю функцию обертывания и возвращенный объект, и поместите export
перед всем, что было в возвращаемом объекте:
// ---- math_utils.js ----
export function add(a,b){
return a + b;
}
// ---- math_utils.test.js ----
import { add } from './math_utils';
test('add', ()=>{
expect(add(1,1)).toBe(2);
});
Вы можете использовать
babel-plugin-rewire
для этого. Проверьте этот пост: https://www.samanthaming.com/journal/2-testing-non-exported-functions/