2014-03-18 196 views
3

我正在通過一些在線的AngularJS實例來了解它是如何工作的。我試圖用茉莉花來測試,就像在例子中一樣。在我的spec文件,我有:

var Person = function (name, $log) { 
    this.eat = function (food) { 
     $log.info(name + " is eating delicious " + food); 
    }; 
    this.beHungry = function (reason) { 
     $log.warn(name + " hungry " + reason); 
    }; 
}; 

var bob = new Person(); 

describe("describe", function() { 
    it("$q", function() { 
     var pizzaOrderFulfillment = $q.defer(); 
     var pizzaDelivered = pizzaOrderFulfillment.promise; 

     pizzaDelivered.then(bob.eat, bob.beHungry); 

     pizzaOrderFulfillment.resolve("resolved"); 
     $rootScope.$digest(); 

     expect($log.TypeInfo.logs).toContain(["resolved"]); 
    }); 
}); 

我我正確使用茉莉花得到

ReferenceError: $q is not defined

?我基本上只是在spec.js文件中編寫我所有的angular和jasmine代碼。當我在另一個文件中使用角碼時,我的spec.js文件找不到它。可能是因爲我沒有設置任何依賴關係,因爲我剛剛開始使用這些東西。

編輯,將$固定爲$ q和referencerror。

+0

你不想'$ q.defer()',而不是'$ .defer()'? – Jonathan

+0

@Jonathan啊是的,但我仍然有錯誤,$ q沒有定義。 – Crystal

回答

4

我想你不是在你的單元測試中注入$q服務。

例如在beforeEach塊,你可以把它注射:

var q; 
beforeEach(inject(function($q) { 
    q = $q; 
})); 

,然後在單元測試:

describe("describe", function() { 
    it("$q", function() { 
     var pizzaOrderFulfillment = q.defer(); 
     var pizzaDelivered = pizzaOrderFulfillment.promise; 

     pizzaDelivered.then(bob.eat, bob.beHungry); 

     pizzaOrderFulfillment.resolve("resolved"); 
     $rootScope.$digest(); 

     expect($log.TypeInfo.logs).toContain(["resolved"]); 
    }); 
}); 
+0

您爲什麼需要注入$ q服務而不是$ log? – Crystal

+0

也許你已經注射了它?我不知道文件其餘部分的內容。 –

+0

我複製並粘貼的是整個文件。如果我必須注入任何東西,我不知道。剛開始時,我正在閱讀的書並沒有列出所有的代碼。只是片段,所以我複製並粘貼了片段。 – Crystal