我需要测试一个使用$ routeParams来定义它的控制器。也许这是一个测试问题,或者我写错了控制器的方式,所以现在我不能写一个测试。
这是我的控制器
angular.module('cmmApp') .controller('UserCtrl',function ($scope,$location,$routeParams,$ionicLoading,$ionicPopup,Userservice) { //if a user id is set retrieve user information if(typeof $routeParams.id !== 'undefined'){ var loader = $ionicLoading.show({content: "Retrieving user data"}); var user = Userservice.get({id: $routeParams.id}).$promise; user.then(function(res){ console.log(res); $scope.user = res.user; loader.hide(); }); } //else create an empty resource else { $scope.user = new Userservice; } });
基本上我只想加载资源,如果提供了一个id是$ routeParams,否则创建一个空的资源。
这里是测试:
'use strict'; describe('Controller: UserCtrl',function () { // load the controller's module beforeEach(module('cmmApp')); var UserCtrl,scope,routeParams; // Initialize the controller and a mock scope beforeEach(inject(function ($controller,$rootScope,Userservice) { scope = $rootScope.$new(); routeParams = $routeParams; UserCtrl = $controller('UserCtrl',{ $scope: scope }); console.log("routeParams"); routeParams = {id: 8490394}; console.warn(routeParams); })); it('should create an epmty user',function () { console.log(scope.user); expect(scope.user).toEqual({}); }); });
当我运行grunt test karma回复:
Controller: UserCtrl should create an epmty user Failed Expected { } to equal { }. Error: Expected { } to equal { }. at null.<anonymous> (/Users/carlopasqualicchio/Sites/CMM_Ionic/test/spec/controllers/user.js:28:24)
我正在赢得如何告诉业务在运行测试之前更改$ routeParams.id,并在两个不同的测试中分配一个不同的值(我需要在第一个测试中将其设置为null,并将值设置为另一个)。
任何帮助是赞赏。
谢谢,马特
您可以使用$ controller(locals对象)的第二个参数传递自定义$ routeParams对象,即与传递$ scope相同:
原文链接:https://www.f2er.com/angularjs/145054.htmlUserCtrl = $controller('UserCtrl',{ $scope: scope,$routeParams: {id: '...'} });