javascript – AngularJS Karma测试 – 测试时未定义传递给控制器​​的Resolve对象

前端之家收集整理的这篇文章主要介绍了javascript – AngularJS Karma测试 – 测试时未定义传递给控制器​​的Resolve对象前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在使用ui-router 0.2.10.

我将一个resolve对象作为参数注入我的控制器,然后在控制器中设置一个范围变量.它在应用程序上完美运行如下:

国家提供者

$stateProvider.state('myState',{
      resolve:{
         foo:  function(){
            return 'bar';
         },url: '/',templateUrl: 'index.html',controller: 'FooCtrl'
   })

调节器

app.Controllers.controller('FooCtrl',['$scope','$state','foo',function ($scope,$state,$log,Zone,foo) {
        $scope.testVar = foo
        console.log($scope.testVar);
    }])

然后,按照预期在Chrome中将“条形图”记录到控制台.

但是当使用Karma运行测试时,解析对象现在是未定义的,这使测试失败.这是测试代码

describe('controllers',function(){

  var $rootScope,$scope,$state

  beforeEach(module('app'))

  beforeEach(inject(function($injector) {
    $state = $injector.get('$state')
    $rootScope = $injector.get('$rootScope')
    $scope = $rootScope.$new()
    $controller = $injector.get('$controller')
  }))

  it('FooCtrl should exist',inject( function() {
    $state.go('myState')
    $rootScope.$apply()

    $controller = $controller('FooCtrl',{
      '$scope': $scope
    })
    $rootScope.$apply()

    assert.equal($scope.testVar,"bar","these strings are equal")
  }))
})

出现此错误(在我的情况下,resolve对象称为resolvedRouteModels):

[$injector:unpr] Unknown provider: fooProvider <- foo
    http://errors.angularjs.org/1.3.0-build.2921+sha.02c0ed2/$injector/unpr?p0=fooProvider%20%3C-%20foo

任何帮助将不胜感激,如果您遇到此问题,请告诉我.

解决方法

当您实例化控制器时,Angular通常可以弄清楚如何满足控制器的依赖关系.在这种情况下,它不知道UI-Router的“解析”功能.

解决此问题的一种方法是在测试中自己提供此依赖项,就像将范围传递给控制器​​一样:

var foo = 'bar'; // whatever
$controller = $controller('FooCtrl',{$scope: $scope,foo: foo} );

注意,您还可以创建一个模拟$state对象,并以相同的方式将其传递给控制器​​,如果您想将其合并到测试中.

猜你在找的JavaScript相关文章