gpt4 book ai didi

javascript - 函数修改不反射(reflect)在输出中

转载 作者:行者123 更新时间:2023-12-03 02:25:22 25 4
gpt4 key购买 nike

我想测试以下代码。

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

行为似乎不一致。

最佳答案

我认为错误的是 barcl 的对象创建。当您引用对象的方法时,必须添加 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是没有 this 的情况下引用。我不知道为什么它没有抛出任何错误。我在浏览器控制台中测试了类似的代码。

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引用它。

关于javascript - 函数修改不反射(reflect)在输出中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48975294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com