Jasmine を使い始めたばかりで、初めていくつかのテストを設定しようとしています。バックボーン コレクションがあります。コレクションを beforeEach() メソッドの一部として取得し、それに対してテストを実行すると考えました。
アプリのプロトタイプを作成するときに使用したテスト json オブジェクトがあるので、呼び出しをモックするのではなく、そのオブジェクトをテスト用に再利用したいと考えています。
これまでの私のコードは次のとおりです(そして失敗しています)。
describe("Vehicle collection", function() {
beforeEach(function() {
this.vehicleCollection = new Incentives.VehiclesCollection();
this.vehicleCollection.url = '../../json/20121029.json';
this.vehicleCollection.fetch();
console.log(this.vehicleCollection);
});
it("should contain models", function() {
expect(this.vehicleCollection.length).toEqual(36);
console.log(this.vehicleCollection.length); // returns 0
});
});
beforeEach メソッドで console.log すると、コンソールは次のようになります...
d {length: 0, models: Array[0], _byId: Object, _byCid: Object, url: "../../json/20121029.json"}
不思議なことに、Chrome 開発者ツールでオブジェクト (小さな三角形) を展開すると、コレクションには車両モデルの配列などが完全に取り込まれます。それでも、テストは失敗します。
Error: Expected 0 to equal 36
「waitsFor()」メソッドを活用する必要があるかどうか疑問に思っていますか?
UPDATE(作業コード付き)
助けてくれてありがとう!
@ deven98602 - あなたは私を正しい軌道に乗せました。最終的に、この「waitsFor()」の実装は最終的に機能しました。このコードが他の人に役立つことを願っています! これが貧弱なテクニックである場合は、コメントを残してください。ありがとう!
describe("A Vehicle collection", function() {
it("should contain models", function() {
var result;
var vehicleCollection = new Incentives.VehiclesCollection();
vehicleCollection.url = '/json/20121029.json';
getCollection();
waitsFor(function() {
return result === true;
}, "to retrive all vehicles from json", 3000);
runs(function() {
expect(vehicleCollection.length).toEqual(36);
});
function getCollection() {
vehicleCollection.fetch({
success : function(){
result = true;
},
error : function () {
result = false;
}
});
}
});
});