我创建了这段代码
function myFunction() {
var myObject = {
objProperty: "string",
objMethod: function() {
return myObject.objProperty;
}
};
return myObject.objMethod();
};
现在我正在尝试进行单元测试,以检查代码是否按预期运行:
describe("checking syntax and function integrity", function(){
// called before each spec is ran
before(function(){
});
it ("should return 'string' when myFunction is called", function(){
Test.assertEquals(myFunction(), 'string', 'myFunction did not return "string"');
});
it ("should check if myObject.objMethod was called", function(){
});
});
我的问题:是否可以检查myObject.objMethod是否被调用?我正在使用CodeWars提供的测试框架。
答案 0 :(得分:0)
看来这个测试框架不支持这样的事情。但你可以这样做:
it ("should check if myObject.objMethod was called", function(){
let oldMethod=myObject.myMethod;
let callCount=0;
myObject.myMethod=function(){
callCount++;
oldMethod.apply(this,arguments);
}
//do stuff that should trigger the method
//and then... check!!! :
Test.assertEquals(callCount,1);
});
修改:我没有看到myObject是myFunction()
的内部对不起,抱歉。所以答案是:
你不能!因为你的测试环境无法访问myObject。在这里测试它甚至没有意义,因为它是你的功能的内部。您可以(并且应该)测试的唯一事情是MyFunction()
调用返回一个字符串,可能是一个匹配某些随机标准的字符串。
如果它至少不是一个对象文字,而是一个从构造函数实例化的对象,它应该得到自己的测试,但这不是这里的情况。
如果要测试myObject的行为,请将其重复使用:创建MyObject()
构造函数,或通过参数将对象传递给myFunction(myObject)
调用。