mocha返回"回调不是函数"用于异步调用

时间:2015-11-22 13:12:30

标签: node.js asynchronous gulp mocha babeljs

我试图使用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中的错误还是......我不知道!

无论如何,请事先感谢您的帮助。

0 个答案:

没有答案