Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mocha测试用例-嵌套的it()函数是否符合犹太教?_Javascript_Node.js_Asynchronous_Jasmine_Mocha.js - Fatal编程技术网

Javascript Mocha测试用例-嵌套的it()函数是否符合犹太教?

Javascript Mocha测试用例-嵌套的it()函数是否符合犹太教?,javascript,node.js,asynchronous,jasmine,mocha.js,Javascript,Node.js,Asynchronous,Jasmine,Mocha.js,我有这样一个例子,我想在Mocha测试中嵌套it()测试用例。我确信这是错误的,我没有看到任何建议来做我正在做的事情,但我现在真的不知道有什么更好的方法- 基本上,我有一个“父”测试,在父测试中有一个包含所有“子”测试的forEach循环: 正如您所看到的,注释掉了两个单独的行-我想包括它们,以便可以轻松查看每个单独测试的结果,但是我遇到了这样一个尴尬的情况,即为测试启动回调,同时为async.each启动回调 以前有没有人见过这种情况,并且知道一种很好的解决方案,测试人员可以很容易地在一个循环

我有这样一个例子,我想在Mocha测试中嵌套
it()
测试用例。我确信这是错误的,我没有看到任何建议来做我正在做的事情,但我现在真的不知道有什么更好的方法-

基本上,我有一个“父”测试,在父测试中有一个包含所有“子”测试的forEach循环:

正如您所看到的,注释掉了两个单独的行-我想包括它们,以便可以轻松查看每个单独测试的结果,但是我遇到了这样一个尴尬的情况,即为测试启动回调,同时为async.each启动回调


以前有没有人见过这种情况,并且知道一种很好的解决方案,测试人员可以很容易地在一个循环中看到每个测试的结果?

我认为对动态测试的需求是比较普遍的(数据驱动测试?),动态
it
和测试用例也很常见

我认为,如果测试可以串联执行,那么管理测试用例完成会更容易。这样,您就不必担心管理嵌套的异步
done
。由于
request
是异步的(我假设),您的测试用例仍然主要是并发执行的

describe('[test] enrichment', function () {

        var self = this;


        _.each(self.tests, function (json, cb) {

            it('[test] ' + path.basename(json), function (done) {

                var jsonDataForEnrichment = require(json);
                jsonDataForEnrichment.customer.accountnum = "8497404620452729";
                jsonDataForEnrichment.customer.data.accountnum = "8497404620452729";
                var options = {
                    url: self.serverURL + ':' + self.serverPort + '/event',
                    json: true,
                    body: jsonDataForEnrichment,
                    method: 'POST'
                };


               request(options,function (error, response, body) {
                    if (error) {
                        cb(error);

                    }
                    else{
                        assert.equal(response.statusCode, 201, "Error: Response Code");
                        cb(null);
                    }

                    done(); 
                });

            });

        }
    });

不要嵌套
调用。同步呼叫他们。

嵌套的
it
调用在摩卡咖啡中永远不会正常。
it
调用也不是异步执行的。(测试可以是异步的,但不能异步调用
it
。)下面是一个简单的测试:

describe("level 1", function () {
    describe("first level 2", function () {
        it("foo", function () {
            console.log("foo");
            it("bar", function () {
                console.log("bar");
            });
        });

        setTimeout(function () {
            it("created async", function () {
                console.log("the asyncly created one");
            });
        }, 500);
    });

    describe("second level 2", function () {
        // Give time to the setTimeout above to trigger.
        it("delayed", function (done) {
            setTimeout(done, 1000);
        });
    });
});
如果运行此操作,则不会得到嵌套测试
将被忽略,异步创建的测试(
延迟
)也将被忽略


Mocha没有为这类调用定义语义。在撰写本文时,当我使用最新版本的Mocha(2.3.3)运行测试时,它只是忽略了它们。我记得早期版本的Mocha可能会识别这些测试,但会将它们附加到错误的
descripe
块。

使用descripe()而不是it()作为父级的一个问题是回调的上下文不同。嵌套it()更好,因为“this”将引用相同的东西..有点难以解释好的,你是对的,嵌套it()会导致问题,而不是那样做
describe("level 1", function () {
    describe("first level 2", function () {
        it("foo", function () {
            console.log("foo");
            it("bar", function () {
                console.log("bar");
            });
        });

        setTimeout(function () {
            it("created async", function () {
                console.log("the asyncly created one");
            });
        }, 500);
    });

    describe("second level 2", function () {
        // Give time to the setTimeout above to trigger.
        it("delayed", function (done) {
            setTimeout(done, 1000);
        });
    });
});