测试javascript函数时出现错误类型的错误
我正在尝试测试以下代码:测试javascript函数时出现错误类型的错误,javascript,unit-testing,Javascript,Unit Testing,我正在尝试测试以下代码: /** ABSTRACT METHOD PLACEHOLDER */ MyResult.prototype.get = throwNotImplementedError; function throwNotImplementedError(resultId) { throw new NotImplementedError('Please implement in Item Groups and Items. This call is abstract');
/** ABSTRACT METHOD PLACEHOLDER */
MyResult.prototype.get = throwNotImplementedError;
function throwNotImplementedError(resultId) {
throw new NotImplementedError('Please implement in Item Groups and Items. This call is abstract');
}
进行以下测试
it('should have a placeholder for get', function(){
expect(function(){return MyResult.get(123);}).toThrowError(NotImplementedError);
});
最终发生的是抛出一个TypeError,而不是自定义的NotImplementedError。类型错误的消息是:“MyResult.get不是函数”
我想知道这是否与在原型“get”中调用变量有关,但我想我见过这样的示例,它们命名javascript类并使用一个称为get的自定义方法。它似乎适用于其他电话
你有什么建议,为什么它不适用于这个电话?这个错误是完全正确的 您定义了
MyResult.prototype.get
,它与MyResult.get
无关
您可能想创建一个实例。错误完全正确 您定义了
MyResult.prototype.get
,它与MyResult.get
无关
您可能想创建一个实例。这是一个原型函数 因此,您必须使用如下对象的实例测试
get
函数:
it('should have a placeholder for get', function(){
var resultObj = new MyResult(); // Create an instance of your object
expect(function(){return resultObj.get(123);}).toThrowError(NotImplementedError);
});
这是一个原型功能 因此,您必须使用如下对象的实例测试
get
函数:
it('should have a placeholder for get', function(){
var resultObj = new MyResult(); // Create an instance of your object
expect(function(){return resultObj.get(123);}).toThrowError(NotImplementedError);
});
谢谢你的快速回复。比如说,我希望这个类有静态方法,这些方法基本上可以像创建MyResult对象(或MyResult对象列表)的工厂一样使用。我该如何创建它?我会排除prototype这个词吗?当你在prototype对象中实现一个函数时,它不是静态的。这是一个类的类似OOP的方法(在您的例子中,
MyResult
的行为类似于类)。感谢您的快速响应。比如说,我希望这个类有静态方法,这些方法基本上可以像创建MyResult对象(或MyResult对象列表)的工厂一样使用。我该如何创建它?我会排除prototype这个词吗?当你在prototype对象中实现一个函数时,它不是静态的。这是一个类的类似OOP的方法(在您的例子中,MyResult
的行为就像一个类)。谢谢!如果你有时间,也许你可以澄清一下。我假设Prototypic Inheritance将使MyResult.get(如果它没有任何内容)能够查看原型并发现MyResult.prototype.get有一个方法,因此使用该方法。你能纠正我思维上的错误吗?@ThinkBonobo:No.原型继承适用于类实例(例如,newmyresult())
MyResult
本身是函数的一个实例,继承了它的原型。谢谢你的澄清。我必须想出另一种方法将我的“工厂方法”加入到我的代码中。谢谢!如果你有时间的话,也许你可以澄清一点。我假设原型继承会使我的结果.get(如果它没有任何东西)会查看原型,发现MyResult.prototype.get有一个方法,因此使用了该方法。你能纠正我思考中的错误吗?@ThinkBonobo:不。原型继承适用于类实例(例如,new MyResult()
MyResult
本身是函数的一个实例,并继承了它的原型。感谢您的澄清。我必须找到另一种方法将我的“工厂方法”加入到我的代码中。仅供参考。SLaks和Tao让我知道原型只适用于实例化的类。为了如果要将该方法用作“类方法”,我必须排除术语prototype,并确保使用名称调用它。例如,将其声明为MyResult.get=function(){…};并像MyResult.get()一样使用它;仅供参考。SLaks和Tao让我知道prototype仅适用于实例化的类。为了能够将该方法用作“类方法”,我必须排除prototype一词,并确保我用名称调用它。例如,声明它为MyResult.get=function(){…};并像MyResult.get()一样使用它;