angularjs - Angular 测试使用 RouteParams 的 Controller

标签 angularjs jasmine routes params karma-runner

我需要测试一个使用 $routeParams 的 Controller 定义它的 Action 。可能是测试问题,或者是我写 Controller 的方式不对,所以现在写不了测试。

这是我的 Controller

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, $routeParams, 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)

我在想如何告诉 karma 改变$routeParams.id在运行测试之前,并在两个不同的测试中分配不同的值(我需要在第一个测试中将其设置为 null,并为另一个设置一个值)。

任何帮助表示赞赏。

谢谢,马特。

最佳答案

您可以通过自定义 $routeParams使用 $controller 的第二个参数的对象(locals 对象),即与您传递 $scope 的方式相同:

UserCtrl = $controller('UserCtrl', {
    $scope: scope,
    $routeParams: {id: '...'}
});

关于angularjs - Angular 测试使用 RouteParams 的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122058/

相关文章:

angularjs - 添加甜蜜警报 Angular js

javascript - 如何使用 ng-click 传递 php 变量

javascript - 使用 AngularJS 和 Firebase 更新 ng-repeat 中的值

unit-testing - Karma Jasmine : Same Function Name, 两个不同的源文件

angular - 错误 : Can't resolve all parameters for ContactService: (?)

angular - ASP.NET Core 3 Angular API 调用返回index.html

angularjs - 带有 ui-router 的嵌套 Angular 状态中的不同布局?

javascript - promise : Unit testing a recursive method that fires promises in a queue one after the other

ruby-on-rails - Rails Restful 路由和子域

javascript - 仅在 AngularJS 单页应用程序中的特定页面上进行路由配置