我有一個Angular JS應用程序,其中包含一個模塊和一些服務。我的控制器使用這些服務。在Jasmine測試用例中,我使用Jasmine的createSpy
創建了一個服務模擬。以下是模擬服務:茉莉花的間諜投擲不是功能錯誤
beforeEach(module(function ($provide) {
shoppingData = function() {
getAllItems: jasmine.createSpy('getAllItems');
addAnItem: jasmine.createSpy('addAnItem');
removeItem: jasmine.createSpy('removeItem');
};
$provide.value('shoppingData', shoppingData);
}));
控制器在創建對象後立即調用getAllItems
函數。我創建了另一個創建控制器對象的beforeEach
塊。以下是試塊,以檢查是否getAllItems
被稱爲:
it("Should call getAllItems function on creation of controller", function() {
expect(shoppingData.getAllItems).toHaveBeenCalled();
});
當我運行在瀏覽器中亞軍規範網頁,測試失敗,以下錯誤:類型錯誤:「shoppingData.getAllItems」是不是一個函數
我看到了幾個類似的例子,這種測試沒有任何問題。任何人都可以指出什麼是缺失或什麼是錯誤的?
更新:我創建了一個plunker with the part that fails
我試過這個方法了。但它會拋出一個錯誤:'無法將shoppingData.getAllItems'轉換爲對象 –
也許您正在做其他事情。我做了一個[在這裏工作的Plnker](http://plnkr.co/edit/Fj66l17cVtMe3XoxK8CS?p=preview)。看它。如果你什麼都不懂,請告訴我,我會盡力解釋。也許你忘了創建控制器,或者注入一些東西。只有當你第一次注入東西的時候,模塊纔會被創建,並且shoppingData可以被使用。 –
感謝您的努力。調整好你的plunker並分析我的代碼後,我知道它失敗了,因爲我調用getAllItems的函數使用返回的對象來調用then()函數。我分叉你的plnk並創建了一個演示。你可以從這裏訪問它:http://plnkr.co/edit/BenU8lJtICS2uNyrtjns?p=preview –