1、断言
单元测试的核心部分是断言。所谓断言,则是表达程序设计人员对于系统应达到状态的一种预期。javascript中没有提供断言,但我们可以自己设计这个方法。
function assert(msg, value) {
if (!value) {
throw new Error(msg);
}
assert.count++;
return true;
}
assert.count = 0;
这里,assert函数只是见车它的第二个蚕食是否为真(除了false、null、undefined、0、“”、和NaN之外的任何值)。如果为真,就把断言计数器加1,否则就抛出错误。
2、红和绿
在单元测试中,通常分别用“红” 和 "绿” 来表示 “失败” 和 “成功“ 。因为让测试变红或变绿,会使得结果更加容易理解。下面提供了一个简化的输出函数,使用DOM来显示颜色的消息
function output(text, color) {
var p = document.createElement("p");
p.innerHTML = text;
p.style.color = color;
document.body.appendChild(p);
}
3、测试函数
由于测试失败时assert函数只是简单地抛出错误,所以我们没法知道出错的测试之后是失败还是成功。所以,我们可以把测试组织成测试函数。如此一来,每个测试函数就只执行一个单元,但可以调用一个或多个断言。
function TestCase(name, tests) {
assert.count = 0;
var successful = 0;
var testCount = 0;
var hasSetup = typeof tests.setUp == "function";
var hasTeardown = typeof tests.tearDown == "function";
for (var test in tests) { //只执行以test开头的函数
if (!/^test/.test(test)) {
continue;
}
testCount++;
try {
if (hasSetup) {
tests.setUp(); // 执行设置函数
}
tests[test](); // 执行测试函数
output(test, "#0c0"); // 在页面输出绿色
if (hasTeardown) {
tests.tearDown(); // 执行拆除函数
}
successful++;
} catch (e) {
output(test + " failed: " + e.message, "#c00"); // 在页面输出红色与错误信息
}
}
var color = successful == testCount ? "#0c0" : "#c00";
output("<strong>" + testCount + " tests, " +(testCount - successful) + " failures</strong>", color);
}
下面是具体的使用方法,这个测试将会测试失败,因为arr的长度是5而不是7。
TestCase("assertTest", {
setUp: function () {
this.arr = [1, 2, 3, 4, 5];
},
"test arr length": function() {
assert("arr length is 7", this.arr.length === 7);
},
tearDown: function () {
}
});
by、junjun16818