我试图使用nodejs(es6 + babel)和mocha。
这是我测试的基类:
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查询以获取特定值。 我已经对已下载的内容进行了基本缓存,因此我可以使用getAValue多次查询它,并使用nextTick允许我保持函数始终异步。
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中完美运行,但是使用mocha(以及伊斯坦布尔的覆盖范围)来测试它(一次没有缓存,接下来看看是否使用了缓存),我得到以下错误:
插件中的TypeError' gulp-mocha'信息: 回调不是函数详细信息: 域:[对象对象] domainThrown:true Stack:TypeError:回调不是函数 在doNTCallback0(node.js:407:9) at process._tickDomainCallback(node.js:377:13)
这是我的testfile:
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();
});
});
});
});

错误发生在第二个"它"测试
不确定我是否错误地使用它或者这是gulp-mocha中的错误还是......我不知道!
无论如何,请事先感谢您的帮助。