2012-06-02 9 views
20

バックボーンプロジェクト用のユニットテスト(QUnitを使用)の一環として、バックボーンモデルの配列を返すコレクション操作関数をテストします。ユニットテストでオブジェクトが "Backbone.Model"であるかどうかをテストする方法はありますか?

私の配列内のオブジェクトがBackbone.Modelを拡張するかどうかを直接テストする方法はありますか?(もしそうなら、どのようにユニークな属性があるかなど) )?

javascriptに実際の「クラス」構成がないので、typeofは明らかにこのトリックを行いません。

など、私はこれが私のコレクションのための道を他の検査に有用であること、または物事が私の具体的なバックボーン・クラスのインスタンスであることを確認するために見ることができる

答えて

33

どうinstanceof使用について:

console.log(yourObject instanceof Backbone.Model); 

instanceof演算子は、オブジェクトがプロトタイプ にコンストラクタのprototypeプロパティをチェーンしているかどうかをテストします。

+0

クール。私はまだそれを学んでいなかった。ありがとう! –

+0

@ベン:歓迎です – Sarfraz

2

オブジェクトタイプのチェックは、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 
+0

応答ありがとう、Derick! Los Techiesに関するあなたの記事は本当に役に立ちました。私は型チェックがどんな動的な言語でも厄介であることに気付いていますが、テストを書くときに例外を作ることも時々ありますが、可能な限り避けるべきだと思います。 –

関連する問題