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