测试JavaScript函数
当我试图测试下面的代码错误类型的错误:测试JavaScript函数
/** 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不是函数”。
我想知道它是否可能与调用原型中的变量有关'获取',但我想我已经看到这样的例子,他们命名的JavaScript类和使用他们调用的自定义方法获取。它似乎适用于其他呼叫。
对于此调用不起作用的原因,您有任何建议吗?
这是一个原型功能
所以你必须测试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对象列表)我将如何创建它?我会排除单词原型吗? – ThinkBonobo
当你在一个原型对象中实现一个函数时,它不是静态的。它是类的类OOP方法(在你的情况下,'MyResult'就像一个类一样)。 –
错误是完全正确的。
您定义了MyResult.prototype.get
,与MyResult.get
无关。
您可能想要创建一个实例。
谢谢!如果你有时间,也许你可以澄清一点。我认为原型继承将使得MyResult.get(如果没有任何东西)会查找原型,并发现MyResult.prototype.get有一个方法,因此使用它。你能不能在思考中解决我的失误? – ThinkBonobo
@ThinkBonobo:序号原型继承对类_instances_(例如'new MyResult()')有效。'MyResult'本身是'Function'的一个实例,并且继承了它的原型。 – SLaks
感谢您的澄清。找出另一种方法将我的'工厂方法'扔进我的代码然后 – ThinkBonobo
仅供参考其他任何人。 SLaks和Tao让我知道原型只适用于实例化的类。为了能够将该方法用作“类方法”,我必须排除术语原型,并确保使用名称来称呼它。例如声明它MyResult.get = function(){...};并使用它像MyResult.get(); – ThinkBonobo