一个不需要输入错误消息的assert函数
an assert function that doesnt require you to enter an error message
用javascript实现断言并不困难:
assert = function(expression,errorMessage){
if (!expression){
errorMessage = errorMessage || "(no msg)";
throw new Error("assert failed: "+errorMessage);
}
return true;
};
然而,使用这个版本的assert是令人厌烦的,因为您必须为每个测试用例都有一个有意义的错误消息:
var types = {isNumber:function(x){return typeof x === "number" && isFinite(x)}}
assert(types.isNumber(1)===true,"types.isNumber(1)===true");
assert(types.isNumber(NaN)===false,"types.isNumber(NaN)===false");
我的问题是,有没有一种方法可以实现assert函数,使其只接受一个表达式,并且如果不满足该表达式,它可以返回有意义的错误消息?类似:
assert(SOMETHING_that_is_not_true); // throw Error: SOMETHINGELSE that refers to this particular assertion
assert(SOMETHING_that_is_not_true2); // throw Error: SOMETHINGELSE2 that refers to this different assertion
对于每个断言,它的代码比简单的表达式多一点,但这怎么样?
assert = function(expression){
if (!expression()){
errorMessage = expression.toString() || "(no msg)";
throw new Error("assert failed: "+errorMessage);
}
return true;
};
assert(function() { return 'b' == 'a' });
我只想添加它,因为它将工作。但它是
不建议
因为它使用eval,也就是juck。但如果你不面对客户,它是有用的。(我在说什么?这不是建议。到此为止。但它确实有效。)
function assert(expression){
var success = eval(expression);
if(!success) throw new Error("assert failed: "+ expression);
else return true;
}
然后你可以做
assert("types.isNumber(1)===true");
因此,请重申,使用上面的@James Thorpe代码(希望如此)。
相关文章:
- jQuery在输入下验证post错误消息
- ng消息仅在触摸时显示错误,并在错误的初始显示上转换
- 解析云代码错误:解析.错误{代码:141,消息:“未调用成功/错误”}
- 在AngularJs中隐藏默认错误消息
- 如果用户输入的长度小于最小长度,则显示错误消息
- 使用ASP.NET CustomValidator避免重复的错误消息
- KOValidation在错误消息中获取可观察值、$index()、$data等
- 更改精细上载中的错误消息
- 如何在页面刷新时隐藏错误消息
- 如何显示错误消息
- 滑块未显示,控制台中没有错误消息
- 表单提交没有'如果为空,则不会显示错误消息
- 为什么我的Alexa技能测试显示正确的lambda输出,但在开发人员控制台中测试时却给出错误消息
- 隐藏错误消息“;未选择文件”;asp:fileUpload的文本
- 如何在消息中抛出tv4错误
- 登录时显示自定义错误消息
- jQuery AJAX 调用以发布消息 - 错误 堆栈空间不足
- 不断收到'向云PubSub发送测试消息错误…'Google Cloud PubSub
- 抑制WebBrowser JavaScript消息错误
- 在Chrome中解析SVG路径日志消息错误