【发布时间】:2016-02-20 02:51:10
【问题描述】:
用于 API 调用的静止角。
我的目标是通过调用控制器来编写单元测试用例并测试所有范围都已分配,带有 REST API 响应但不是 MOCK RESPONSE 的代码块。
Rest Angular 服务 :-
(function () {
angular.module('movieApp').service('movieApiService', callMoviesApi);
function callMoviesApi(Restangular) {
this.getMyMovie= function (Id) {
return Restangular.one('movies/' + movieId).get().then(function(result){
return result.plain();
});
};
this.getMoviesList = function () {
return Restangular.all('movies').getList().then(function(result){
return result.plain();
});
};
}
}());
我将此服务作为依赖项注入到控制器的位置 控制器代码如下:-
angular.module('movieApp').controller('MoviesController', ['$scope','movieApiService', 函数 ($scope, MovieService) {
$scope.movie = $stateParams.movieId;
MovieService.getMovieDetails($scope.movie).then(function (result) {
$scope.movieDetails = result;
$scope.movieId = result._id;
$scope.movieName = result.displayName;
});
}
]);
我确实尝试为上述控制器编写单元测试,但效果不佳:-(
测试代码如下:-
'use strict';
(function() {
describe('MoviesController', function() {
//Initialize global variables
var scope,stateParams={},
MoviesController;
// Load the main application module
beforeEach(module('movieApp'));
beforeEach(inject(function($controller, $rootScope,$stateParams) {
scope = $rootScope.$new();
stateParams.movieId='Baahubali';
HomeController = $controller('MoviesController', {
$scope: scope,
$stateParams:stateParams
});
}));
it('Should call movieApi and Assign Scopes', function() {
var Api="http://testsite.com/moives/thor";
var myScope=$httpBackend.expectGET(Api).passthrough();
expect(scope.movie).toBeDefined();
console.log('****'+scope.movie.displayName);
});
});
})();
错误正在引发:-
Error: Unexpected request: GET http://testsite.com/movies/undefined
Expected GET http://testsite.com/movies/undefined?
at $httpBackend (C:/wrokingdir2015/public/lib/angular-mocks/angular-mocks.js:1245)
at sendReq (C:/wrokingdir2015/public/lib/angular-mocks/public/lib/angular/angular.js:9695)
任何人都可以帮助我编写一个单元测试用例,它可以像在真实控制器中一样初始化控制器和分配范围进行测试。
老实说,我是单元测试的新人。
【问题讨论】:
标签: angularjs rest unit-testing restangular angular-mock