"这"引用在nodeJs中不起作用

时间:2016-07-28 11:42:49

标签: javascript node.js unit-testing mocha sinon-chai

我的nodeJs代码中有两个方法,如

function method1(id,callback){
  var data = method2();
  callback(null,data);
}

function method2(){
  return xxx;
}

module.exports.method1 = method1;
module.exports.method2 = method2;

使用SinonMocha测试函数method1我必须使用stub方法method2。  需要将方法method2称为

function method1(id,callback){
      var data = this.method2();
      callback(null,data);
}

的测试代码
describe('test method method2', function (id) {
    var id = 10;
    it('Should xxxx xxxx ',sinon.test(function(done){
       var stubmethod2 = this.stub(filex,"method2").returns(data);
       filex.method1(id,function(err,response){
         done();
       })
    })
})

使用此测试用例传递,但代码停止使用错误 this.method2不是函数。

有什么方法可以摆脱看似错误的thismodule.exports

如果我错过任何其他信息,请告诉我。

2 个答案:

答案 0 :(得分:0)

您没有正确使用module.exports。

将您的代码更改为:

export function method1(id,callback){
  var data = method2();
  callback(null,data);
}

export function method2(){
  return xxx;
}

然后:

const MyFuncs = require('path_to_file_with_methods');

您需要的方法,如下所示:

MyFuncs.method1(){} MyFuncs.method2(){}

module.exports

的文档

您还可以按以下方式使用module.exports。

module.exports = {
    method1: method1,
    method2: method2
}

并以同样的方式要求。

修改

请注意,如果您的版本支持它,您还可以在导出中使用一些语法糖:

module.exports = {
    method1,
    method2
}

一般来说,它适用于对象文字符号。

答案 1 :(得分:0)

使用箭头功能更正此方法

以您的情况

function method1(id,callback){
  var data = this.method2();
  callback(null,data);
}

可以更改为

  let method1 = (id,callback)=>{
    var data = this.method2();
    callback(null,data);
  }