我正在创建一个单元测试框架,我试图弄清楚以下代码部分如何在不使用全局变量的情况下输出:
describe("Test Title", function () {
it("should return a string", function () {
/* Assertions here */
});
});
//OUTPUT: "PASS: Test Title should return a string"
有人可以解释一下 it
方法调用如何以某种方式设法将其参数之一获取到 describe
吗?
如果这还不清楚,我想说的是我想知道变量如何通过回调移动。如果我理解发生了什么,回调中对外部函数的方法调用会以某种方式获取另一个外部函数的参数。
最佳答案
您可能认为它
执行传递给它的回调。事实并非如此。它只是将回调注册为测试。
最简单的实现是描述运行测试:
var tests = [];
function describe(description,fn) {
fn();
for (var i=0;i<tests.length;i++) {
try {
tests[i].fn();
console.log('FAIL:' + description + ' ' + tests[i].description);
}
catch (e) {
console.log('FAIL:' + description + ' ' + tests[i].description);
}
}
}
function it(description,fn) {
tests.push({
description: description,
fn: fn
});
}
但是,从 Mocha 代码来看,即使 describe
也没有真正运行代码,只是注册测试套件以供另一个函数处理:
function describe(description,fn) {
fn();
testSuites.push({
description: description,
tests: tests.slice(0)
});
}
但是逻辑是一样的。创建一个包含所有值的数据结构,然后处理它们。
关于javascript - 创建类似于 Mocha JavaScript 的单元测试框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26111179/