我有以下要测试的代码。
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
行为似乎不一致。
答案 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 引用它。