如何在 AngularJS 中测试具有解析属性的控制器?

2024-05-23

如何测试具有解析属性的控制器? 它会抛出一个错误:未知提供者:InitProvider,在测试期间,这是可以理解的。 我该如何测试它?

我使用路由配置中的 init 属性来加载数据,并在控制器实例化时将其传递给控制器​​,以便在加载数据之前路由不会更改。

  $routeProvider
    .when('/topic/:topic_id/content/:content_id', {
      templateUrl: 'views/content.html',
      controller: 'ContentCtrl',
    resolve: {
      init: ContentCtrl.init
    }
    });

这种模式从一开始就完全错误吗?

'use strict';

var ContentCtrl = ['$scope', '$location', '$routeParams', 'init', function ($scope, $location, $routeParams, init) {

    $scope.contents = init.contents;

  }];

ContentCtrl.init = ['$q', 'app_config', '$log', '$timeout', function ($q, app_config, $log, $timeout) {

    var defer = $q.defer();

    $log.log("ContentCtrl loading..");

    $timeout(function() {
        defer.resolve({contents: [
                                    {message: 'Hello!'}
                                  ]});

        $log.log("ContentCtrl loaded.");

    }, 2000);

    return defer.promise;
}];

angular.module('studentportalenApp').controller('ContentCtrl', ContentCtrl);

我想把整个控制器封装在里面.controler('ContentCtrl', function() { ... }),但尚未弄清楚如何正确完成此操作以使 init 在路由配置中可用。


在这里遇到同样的事情。我使用这里的方法解决了它:https://groups.google.com/forum/?fromgroups=#!topic/angular/LzXm-9nwkjY https://groups.google.com/forum/?fromgroups=#!topic/angular/LzXm-9nwkjY.

基本上,我模拟了通常使用简单变量发送的数据,并将其添加到测试中的控制器中。在你的情况下,我认为它看起来像:

var initData = {
      contents: [{message: 'Hello!'}]
};
$controller("ContentCtrl", { $scope: ..., init: initData });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 AngularJS 中测试具有解析属性的控制器? 的相关文章

随机推荐