当我没有依赖项时,简单角度测试失败($ injector:unpr未知提供程序)

时间:2014-03-29 05:07:24

标签: javascript angularjs

我得到了this error。这是我注射器无法解决所需依赖关系的问题,但即使我对角度的了解有限,我也很确定这段代码不应该依赖于任何模块。

此代码在浏览器中运行良好,但它似乎并不想在我的测试中工作。我一直在关注文档中的examples

我的角度版本为1.2.13(编辑:现在使用1.12.15)。

这是我的代码:

var app = angular.module('app', [])

.controller('GreetingCtrl', function ($scope) {
  $scope.title = "Hello World!";
  $scope.message = "Test, test. One? Two?";
});

这里的茉莉花测试失败了。

describe('app controllers', function () {
  beforeEach(module('app'));

  describe('GreetingCtrl', function () {
    it('should says hello world', inject(function ($controller) {
      var $scope = {};
      $controller('GreetingCtrl', $scope);
      expect($scope.title).toBe("Hello World!");
    }));
  });
});

我不相信它甚至已经达到了运行测试的程度,因为它在运行之前就已经失败了。我相信我也正确地连接了文件。这是我从茉莉花测试运动员那里得到的错误。

Error: [$injector:unpr] http://errors.angularjs.org/1.2.13/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope (line 4569) (1)

修改尝试升级到1.12.15,没有任何变化。

1 个答案:

答案 0 :(得分:8)

显然,在IRC上进行了一些聊天后,文档可能已经过时了。这是一个有效的解决方案。我与solution,&相应地纠正了我的测试。

describe('app controllers', function () {
  var ctrl, scope;

  beforeEach(module('app'));

  describe('GreetingCtrl', function () {
    beforeEach(inject(function ($rootScope, $controller) {
      scope = $rootScope.$new();
      ctrl = $controller('GreetingCtrl', {$scope: scope});
    }));

    it('should says hello world', function () {
      expect(scope.title).toBe("Hello World!");
    });
  });
});

修改:

我不小心误读了原来的文件。这是一个更接近文档的更清洁的解决方案。

describe('app controllers', function () {
  beforeEach(module('app'));

  describe('GreetingCtrl', function () {
    it('should says hello world', inject(function ($controller) {
      var $scope = {};
      // this is the line that caused me pain
      $controller('GreetingCtrl', { $scope: $scope }); 
      expect($scope.title).toBe("Hello World!");
    }));
  });
});