作为骨干项目的单元测试(使用QUnit)的一部分,我测试了一些返回主干模型数组的集合操作函数。
有没有办法直接测试(为了理智)我的数组中的对象是否扩展Backbone.Model或者我应该只进行鸭类型检查(如果是,如何,以及在哪个唯一属性上) ?
由于javascript中没有真正的“类”构造,typeof
显然不会在这里做到这一点。
我可以看到这在我的集合的其他测试中很有用,或者检查事情是我的特定Backbone类的实例等。
答案 0 :(得分:35)
如何使用instanceof
:
console.log(yourObject instanceof Backbone.Model);
instanceof运算符测试对象是否在其原型中 链接构造函数的prototype属性。
答案 1 :(得分:3)
对对象类型的检查是JavaScript等语言中的代码味道。
如果您需要知道您的集合在调用特定方法时返回特定模型,请使用已知模型填充集合并对这些模型进行比较。
MyModel = Backbone.Model.extend({});
MyCollection = Backbone.Collection.extend({
model: MyModel,
getThatOne: function(){
return this.at[0];
}
});
m1 = new MyModel();
m2 = new MyModel();
col = new MyCollection([m1, m2]);
retrieved = col.getThatOne();
retrieved === m1 //=> true