我正在测试在nodejs实例中运行mocha的存储过程。我有一个测试骨架:
var chai = require('chai'),
MyReporter = require("../MyReporter.js"),
chokidar = require('chokidar'),
expect = chai.expect,
should = chai.should,
assert = chai.assert;
var Mocha = require('mocha');
amochai = new Mocha({
bail: false,
debug: true
});
amochai.addFile("mytest_v1.js");
function runMocha(callback) {
amochai.run(function () {
callback();
});
}
watcher.on('change', function(path, stats) {
runMocha(function () {});
}Problem:我的测试总是以异步模式运行,尽管我的所有测试都是这样编写的:
describe('Mysql stored procedures', function(){
describe('Add this data', function(){
it('-- Should return this information', function(){
// asserts
});
});
});没有done()回调,我的意思是没有任何地方,因此,由于在默认情况下mocha.js是同步的,所以,为什么我的代码在异步模式下运行呢?
贴片
要修补我的问题,我必须在()之前使用它并检查我的测试状态,但是这变成了一个需要维护的噩梦。
发布于 2013-12-24 12:09:38
在同步摩卡测试中,您正在运行异步操作。
说摩卡测试是“同步”是模棱两可的。这可能意味着:
两者是不对等的。一种并不意味着另一种。默认情况下,Mocha同步处理所有测试。我们可以让它异步地处理一个测试,但是在传递给it的回调中添加一个参数(或者在其他测试接口中它是等价的)。(后来版本的Mocha最终添加了另一种方法,使Mocha异步处理测试:返回一个承诺。但我将在下面的示例中使用回调。)因此,我们可以有四个同步组合:
fs.readFile不引发exeption)。异步操作仍将被调度,回调可能稍后仍会被调用。这里需要注意的一点是: Mocha没有能力使其测试的操作同步。因此,使Mocha测试同步对测试中的操作没有影响。如果它们是异步的,那么不管我们告诉Mocha什么,它们都将保持异步。最后一种情况是,在您的系统中,存储过程的执行将与DB系统一起排队。如果此队列没有出现错误,则Mocha立即完成。然后,如果有一个文件更改,您的观察者启动另一个Mocha运行和更多的操作排队,等等。
https://stackoverflow.com/questions/20748918
复制相似问题