摩卡返回“callback不是一个函数”asynchronous调用

我正尝试使用nodejs(es6 + babel)和mocha一起。

这是我testing的基类:

import cheerio from 'cheerio'; import ResourceRequest from './ResourceRequest'; export default class HtmlValueParser { constructor(url, headers) { this.rr = new ResourceRequest(url, headers); this.body = null; this.$ = null; } getValue(query) { if (!query) { return; } if (this.$ === null){ this.$ = cheerio.load(this.body); return 'toto'; }else { return 'titi'; } } getAValue(query, callback) { if (this.body === null) { this.rr.getResource((error, response, body) => { this.body = body; let val = this.getValue(query); callback(null, val); }); }else { process.nextTick(callback(null, this.getValue(query))); } } } 

我只是下载一个HTML资源,然后愿意做一个CSS查询来获得一个特定的价值。 我已经放置了下载的内容的基本caching,所以我可以用getAValue多次查询它,并使用nextTick允许我保持函数始终asynchronous。

ResourceRequest对象只是请求模块的一个简单的抽象:

 import request from 'request'; export default class ResourceRequest { constructor(url, headers){ this.options = { url: url, headers: headers }; } getResource(callback) { request(this.options, callback); } } 

这一切都完美地运行在我的index.js,但使用摩卡(与伊斯坦布尔覆盖)来testing它(一次没有caching,接下来看看是否使用caching),我得到以下错误:

types错误在插件'gulp-mocha'消息:callback不是一个函数详细信息:域:[对象对象] domainThrown:true堆栈:TypeError:callback不是在doNTCallback0(node.js:407:9)在process._tickDomainCallback (node.js中:377:13)

这里是我的testing文件:

 import assert from 'assert'; import HtmlValueParser from '../lib/HtmlValueParser'; var url = 'http://google.fr'; var headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36' }; describe('HTMLValueParser', function() { var hvp = new HtmlValueParser(url, headers); describe('Empty Cache', function() { it('should not use cache', function(done) { hvp.getAValue({}, function(error, value) { assert.equal(value, 'toto', 'value should be toto'); done(); }); }); }); describe('Cache Enabled', function() { it('should use cache', function(done) { hvp.getAValue({}, function(error, value) { assert.equal(value, 'titi', 'value should be titi'); done(); }); }); }); }); 

错误发生在第二次“it”testing之后。

不知道如果这个我错误地使用它,或者如果这是一个错误的咕嘟,摩卡或…以及我不知道!

无论如何感谢您的帮助。