功能修改不反映在输出

时间:2018-02-25 15:42:43

标签: javascript node.js qunit

我有以下要测试的代码。

module.exports = {
    // src/code.js
    cl: function(param){
      this.foo = function(){
        return "foo" + param;
      };
    },

    bar: function(param){
      var t = new cl(param);
      console.log(t.foo());
      return t.foo();
    }
};

测试如下:

// tst/test.js
var code = require("../src/code");

QUnit.module("Testing");

QUnit.test("test", function(assert){
    assert.equal("foo", code.bar(""));
});

QUnit.test("test mock", function(assert){
    code.cl = function(param){
      this.foo = function(){
        return "Mock:" + param;
      };
    };

    console.log(code.cl.toString());

    assert.equal("Mock:", code.bar(""));
});

我正在使用以下命令运行测试:

qunit -c ./src/code.js -t ./tst/test.js

功能体的记录打印出以下内容:

function (param){
    this.foo = function(){
        return "Mock:" + param;
    };
    }

但是,第二个断言失败了。

Actual value:
Mock:
Expected value:
foo

行为似乎不一致。

1 个答案:

答案 0 :(得分:1)

我看来错误的是 cl 的对象创建。在引用对象的方法时,必须添加 this

module.exports = {
    cl: function(param){
      this.foo = function(){
        return "foo" + param;
      };
    },
    bar: function(param){
      var t = new this.cl(param); //updated cl call with this
      console.log(t.foo());
      return t.foo();
    }
};

试试这个,如果您的考试通过,请告诉我。

编辑:
var t = new this.cl(param);这里,之前没有引用了 cl 。我不确定为什么它没有抛出任何错误。我在浏览器控制台中测试了类似的代码。

test = {
    cl: function(param){
      this.foo = function(){
        return "foo" + param;
      };
    },
    bar: function(param){
      var t = new cl(param);
      console.log(t.foo());
      return t.foo();
    }
};
test.bar("");


它提出错误,指出 cl 未定义。

Uncaught ReferenceError: cl is not defined
    at Object.bar (<anonymous>:10:15)
    at <anonymous>:1:6

在导出包含 cl 方法的对象时,必须使用中的 this 引用它。