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

Is there a way to test whether an object "is a" Backbone.Model in my unit tests?

本文关键字:是否 Model Backbone 一个对象 测试 我的 单元测试 有没有      更新时间:2023-09-26

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

有没有办法直接测试(为了理智起见)我的数组中的对象是否扩展了 Backbone.Model,或者我应该只做鸭子类型检查(如果是这样,如何以及基于哪个唯一属性,例如)?

由于javascript中没有真正的"类"结构,typeof显然不会在这里解决问题。

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

如何使用instanceof

console.log(yourObject instanceof Backbone.Model);

实例运算符测试对象的原型中是否有 链接构造函数的原型属性。

对对象类型的检查是 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