javascript - 一个断言函数,不需要您输入错误消息

标签 javascript assert

在 JavaScript 中实现断言并不困难:

assert = function(expression,errorMessage){
    if (!expression){
        errorMessage = errorMessage || "(no msg)";
        throw new Error("assert failed: "+errorMessage);
    }
    return true;
};

但是,使用此版本的断言很烦人,因为您必须为每个测试用例提供有意义的错误消息:

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(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' });

关于javascript - 一个断言函数,不需要您输入错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26552197/

相关文章:

java - 在 servlet 中使用断言

javascript - 在 javascript 中返回一个返回值

javascript - Jquery 根据元素的查找方式返回元素的 .width()

python - Python : assert command() == False 的最佳实践

javascript - 错误 : timeout of 2000ms exceeded. 带有 promise 的单元测试

android - Robolectric & 测试 startActivityForResult

javascript - 表数据结构设计

javascript - React Native - 根据动态状态获取 json 的值

javascript - 从其高阶组件中获取包装组件的名称

javascript - Bootstrap3确认模态回调触发两次