[英]How do I test an angular service that uses setInterval using jasmine?
[英]How can I write jasmine test for angular controller and service like this?
我被困了好幾個小時,這是因為我是Jasmine和Angularjs的新手。 基本上,我有這個控制器。
angular.module('toadlane.controllers', []).
controller('MainController', function($scope, $http, SomeService) {
var promise = SomeService.getObjects();
promise.then(function(data) {
if(data.length > 0) {
$scope.objs = data;
} else {
$scope.message = "Please come back soon";
}
});
});
如何編寫Jasmine測試來模擬SomeService來存根data
並模擬是否有數據, scope
的長度不應為0,如果data
為[]則消息應為“請盡快回來”。
'use strict';
describe('controllers', function () {
var scope, someService;
beforeEach(module('services'));
beforeEach(module('controllers'));
beforeEach(inject(function (SomeService) {
someService = SomeService;
var callback = jasmine.createSpy();
someService.getObjs().then(callback);
}));
it('should return some objs', inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
expect($controller('MainController', {$scope: scope, SomeService : someService})).toBeTruthy();
expect(scope.objs.length).toEqual(2);
}));
it('should return no objs', inject(function ($rootScope, $controller) {
scope = $rootScope.$new();
expect($controller('MainController', {$scope: scope, SomeService : someService})).toBeTruthy();
expect(scope.message).toEqual("Please come back soon");
}));
});
這些測試沒有完成,因為我不知道如何存根then
從promise
非常感謝任何幫助。 謝謝。
可以通過使用鏈接方法返回對象的函數模擬promises來測試延遲。 在這種情況下嘲笑SomeService.getObjs
應與方法返回一個對象then
。
為了做到這一點,在beforeEach
語句中添加另一個:
beforeEach(module(function ($provide) {
$provide.value('SomeService', {
getObjs: function () {
return {
then: function (callback) {
// mockedResponseData is passed to callback
callback(mockedResponseData);
}
};
}
}));
模擬服務將立即加載現有的promise回調函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.