gpt4 book ai didi

javascript - 如何用 Jest 编写 javascript 揭示模块模式的单元测试?

转载 作者:行者123 更新时间:2023-11-30 14:27:23 25 4
gpt4 key购买 nike

例如:我的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 is undefined or MathUtil() is not a function.

我还尝试使用 require()import。但是 MathUtil 没有 module.exportexport

那么如何用 Jest 编写 javascript 揭示模块模式的单元测试呢?

注意:我有一个项目,所有脚本都以显示模块模式编写,因此将所有脚本都转换为 ES2015 模块可能不切实际。

最佳答案

如果您真的想要完全按照编写的方式测试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);
});

...但最佳做法是将代码重构为模块。对于 revealing module pattern这应该是一个非常简单的过程,只需删除外部包装函数和返回的对象,并将 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);
});

关于javascript - 如何用 Jest 编写 javascript 揭示模块模式的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51720837/

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