我在設置測試包含承諾的Angular控制器時遇到了一些麻煩。使用Jasime測試角度控制器的承諾
控制器代碼是這樣的:
angular.module('jhApp')
.controller('adminPagesCtrl', function(resourceCache) {
var adminPages = this;
adminPages.items = resourceCache.query('page');
adminPages.delete = function(page) {
resourceCache.delete('page', {id:page._id})
.then(function(responceData) {
if(responceData.deleted === true) {
adminPages.items = resourceCache.query('page');
}
});
};
});
我的測試是這樣的:
describe('adminPagesCtrl', function() {
var defferred,
$rootScope,
controller,
resourceCache,
scope,
page,
defferred,
promise;
beforeEach(function() {
module('jhApp');
});
beforeEach(inject(function ($rootScope, $controller, $q) {
scope = $rootScope.$new();
controller = $controller('adminPagesCtrl as adminPages', {$scope: scope});
deffered = $q.defer();
promise = deffered.promise;
resourceCache = {
delete: promise
};
page = {_id: 1};
spyOn(resourceCache, 'delete');
}));
it('deletes a page', function() {
expect(controller).toBeDefined();
scope.adminPages.delete(page);
console.log(resourceCache.delete) //outputs: function{}
console.log($rootScope) //outputs: undefined
resourceCache.delete.resolve({deleted: true});
$rootScope.$apply();
expect(resourceCache.delete).toHaveBeenCalled();
});
});
我試圖嘲弄resourceCache承諾,因此返回一些假的數據,所以我可以測試返回了一些東西,並且adminPages.delete調用了resourceCache.delete。 我覺得我做的根本錯誤,雖然作爲當前錯誤的東西:
undefined is not a fuction
這我相信,是因爲如果我嘗試登錄了resourceCache.delete它只是顯示空功能。第一個期望
resourceCache.delete.resolve();
通過確定。
如果我只打電話給第一個預期並刪除$ rootScope。$ digest,現在工作情況會好一些。如果我在第一次保存$ rootScope摘要期望失敗錯誤:意外的請求:嘗試加載其中一個項目html模板的GET。其他兩種期望也會使測試失敗 – 2015-02-10 21:25:25
爲什麼在測試中加載html模板? – 2015-02-10 21:26:53
我沒想到我正在加載模板。如果我有,那麼它不是故意 – 2015-02-10 21:34:49