Angular:如何解决$ httpProvider的[$ injector:unpr]错误并在jasmine测试中注入控制器

时间:2016-12-21 13:35:31

标签: angularjs jasmine

我是角度测试的新手。使用jasmine测试角度代码时遇到一些问题。

如果您阅读我的问题并尝试解决我的问题,我会非常感激,因为我用Google搜索但找不到任何令人满意的解决方案

这是我的角度应用

var app = angular.module('myApp', ['ngAnimate', 'ui.router', 'ui.bootstrap', 'toggle-switch',
    'ngTagsInput', 'blockUI', 'ngBootbox', 'ui.select', 'ngSanitize', 'angular.filter']);

app.config(["$httpProvider", "blockUIConfig", function ($httpProvider, blockUIConfig) {
    'use strict';
    blockUIConfig.autoBlock = false;
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    $httpProvider.interceptors.push('interceptorService');
}]);

这是控制器文件:

app.controller('myController', ['$scope', '$filter', '$http', '$window', '$ngBootbox', '$modal', 'dataservice', 'user', 'message_kinds',
    function($scope, $filter, $http, $window, $bB, $modal, dataservice, user, message_kinds) {
       $scope.user = user;
       /controller logic/
}]);

如果$ scope.user等于用户,我想测试这个控制器。使用jasmine进行测试。这是spec文件。

describe("myController", function() {

  beforeEach(module('myApp'));

  beforeEach(inject(function(_$controller_){
    $controller = _$controller_;
  }));

  describe("myController testing", function () {

    it("should update scope.user", function () {
      var user = {customer_id: 1};
      var my_controller = $controller('myController', { user: user });
      expect(my_controller.user).toEqual(user);
    });
  });

});

我还在SpecRunner.html中包含了所有依赖文件,例如angular.js,angular-mocks.js等

有三个问题:

  1. 关于[$injector:unpr] http://errors.angularjs.org/1.4.4/$injector/unpr?p0=interceptorServiceProvide
  2. app.config块上出现$httpProvider错误 在行

    的spec.js中
  3. ReferenceError: $controller is not defined

    var my_controller = $ controller('myController',{user:user});

  4. 如何在期望区块中测试scope.user是否等于user

1 个答案:

答案 0 :(得分:1)

1)检查this answer,关于$ http / $ httpBackend可能对您有所帮助 - 您可以对此进行调整以获得您正在寻找的答案

2)您是否已将$ controller(现在为$ httpProvider)声明为describe()块开头的变量?

3)你应该已经拥有了。至少在我看来,你的代码看起来应该像你想要的那样工作。