角度单位测试:未知提供者:$$ qProvider< - $$ q< - $ interval

时间:2015-02-03 18:55:01

标签: javascript angularjs unit-testing dependency-injection jasmine

我正在尝试为现有的Angular JS项目设置单元测试,但我一直在标题中收到错误:

Unknown provider: $$qProvider <- $$q <- $interval

这是我的单元测试:

描述(&#34;屏幕控制器&#34;,功能(){

beforeEach(module('tsApp'));

var scope, createController, $interval, $timeout, $translate, $sce, $controller; 

beforeEach(inject(function(_$controller_, $rootScope, _$interval_, _$timeout_, _$translate_, _$sce_ ){

    // The injector unwraps the underscores (_) from around the parameter names when matching
    $interval = _$interval_;
    $timeout = _$timeout_;
    $translate = _$translate_;
    $sce = _$sce_;
    $controller = _$controller_;
    scope = $rootScope.$new();

    createController = function() {
      return $controller('screenCtrl', {
        '$scope' : scope,
        '$interval' : $interval,
        '$timeout' : $timeout,
        '$translate' : $translate,
        '$sce' : $sce
      });
    };
}));

describe('first test', function() {
    it('it runs without error!', function() {
      var controller = createController();
      expect(true).toEqual(true);
    });
});

});

我试图测试的控制器就像这样开始:

var screenCtrl = tsApp.controller('screenCtrl', function($scope, updateService, $translate, $sce, $interval, $timeout) {

我猜测我注射的依赖性有问题。提前谢谢。

1 个答案:

答案 0 :(得分:3)

AngularJS 1.3.0-beta.14 中引入了

$$qProvider。它没有记录并在内部使用。

在此版本$IntervalProvider使用$q之前,在测试版14及更高版本中,它同时使用$q$$q

某处你有AngularJS模块的冲突版本。

检查所有文件或例如Bower组件。

确保您的核心AngularJS版本足够高,可用于您可能正在使用的其他模块。例如,Angular Material需要Angular 1.3.x。