作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如:我的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.export
或 export
。
那么如何用 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/
我是一名优秀的程序员,十分优秀!