Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
测试javascript函数时出现错误类型的错误_Javascript_Unit Testing - Fatal编程技术网

测试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()一样使用它;