gpt4 book ai didi

inheritance - Jasmine + 测试继承的方法已被调用

转载 作者:行者123 更新时间:2023-12-03 06:14:41 24 4
gpt4 key购买 nike

使用 Jasmine 测试已调用继承方法的最佳方法是什么?

我只对测试它是否被调用感兴趣,因为我为基类设置了单元测试。

示例是:

YUI().use('node', function (Y) {


function ObjectOne () {

}

ObjectOne.prototype.methodOne = function () {
console.log("parent method");
}


function ObjectTwo () {
ObjectTwo.superclass.constructor.apply(this, arguments);
}

Y.extend(ObjectTwo, ObjectOne);

ObjectTwo.prototype.methodOne = function () {
console.log("child method");

ObjectTwo.superclass.methodOne.apply(this, arguments);
}
})

我想测试ObjectTwo继承的methodOne是否已被调用。

提前致谢。

最佳答案

为此,您可以监视 ObjectOne 原型(prototype)中的方法。

spyOn(ObjectOne.prototype, "methodOne").andCallThrough();
obj.methodOne();
expect(ObjectOne.prototype.methodOne).toHaveBeenCalled();

此方法唯一需要注意的是,它不会检查 methodOne 是否在 obj 对象上调用。如果您需要确保它是在 obj 对象上调用的,您可以这样做:

var obj = new ObjectTwo();
var callCount = 0;

// We add a spy to check the "this" value of the call. //
// This is the only way to know if it was called on "obj" //
spyOn(ObjectOne.prototype, "methodOne").andCallFake(function () {
if (this == obj)
callCount++;

// We call the function we are spying once we are done //
ObjectOne.prototype.methodOne.originalValue.apply(this, arguments);
});

// This will increment the callCount. //
obj.methodOne();
expect(callCount).toBe(1);

// This won't increment the callCount since "this" will be equal to "obj2". //
var obj2 = new ObjectTwo();
obj2.methodOne();
expect(callCount).toBe(1);

关于inheritance - Jasmine + 测试继承的方法已被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15055507/

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