javascript - 创建类似于 Mocha JavaScript 的单元测试框架

标签 javascript unit-testing callback

我正在创建一个单元测试框架,我试图弄清楚以下代码部分如何在不使用全局变量的情况下输出:

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/

相关文章:

java - PowerMock 模拟具有有限数据访问的私有(private)方法

unit-testing - 如何在 'rails new app --skip-test-unit' 之后重新启用 Rails 4 中的 Test::Unit

plugins - TinyMCE AutoResize插件,重置溢出

python - 如何避免数组在回调后重置?

javascript - Backbone.js - 如何在模板中使用自定义模型属性?

javascript - 如何从 Angular 应用程序中的 gulp 任务访问 rootPath 集

带有完成功能的 JavaScript 交互式 shell

java - 以方法引用作为参数的单元测试方法

c# - 我应该如何创建回调

javascript - 如何在 MongoDB MapReduce 中生成累积结果