有没有办法在我的单元测试中测试对象“是否是”Backbone.Model?

时间:2012-06-02 15:15:26

标签: javascript backbone.js

作为骨干项目的单元测试(使用QUnit)的一部分,我测试了一些返回主干模型数组的集合操作函数。

有没有办法直接测试(为了理智)我的数组中的对象是否扩展Backbone.Model或者我应该只进行鸭类型检查(如果是,如何,以及在哪个唯一属性上) ?

由于javascript中没有真正的“类”构造,typeof显然不会在这里做到这一点。

我可以看到这在我的集合的其他测试中很有用,或者检查事情是我的特定Backbone类的实例等。

2 个答案:

答案 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