【问题标题】:Unit testing Angular JS controllers单元测试 Angular JS 控制器
【发布时间】:2014-09-17 12:21:58
【问题描述】:

我的 Jasmine 单元测试如下

describe('controllers', function () {
    'use strict';
    beforeEach(module('myapp.controllers'));

    angular.mock.module('myapp.controllers', function ($provide) {
        $provide.value('$localStorage', $localStorage);
    });

   it('should have a creationController', inject(function ($controller, _$rootScope_, localize) {
       var scope = _$rootScope_.$new();
       var localize = localize;
       var myCtrl1 = $controller('creationController', {
           $scope: scope,
           localize: localize
       });
       expect(myCtrl1).toBeDefined();
   }));

});

当我尝试执行测试时,出现以下错误

Error: [$injector:unpr] http://errors.angularjs.org/1.2.20/$injector/unpr?p0=localizeProvider%20%3C-%20localize

控制器中使用了一个称为“localize”的依赖项。但是我无法将它注入到这个单元测试中。

知道如何解决这个问题吗?

【问题讨论】:

  • 你试过 beforeEach(module('myapp.controllers', '')) 吗?
  • @JorgeSainz 尝试了您的建议,现在我收到以下错误错误:[$injector:modulerr] errors.angularjs.org/1.2.20/$injector/…
  • 你能创建一个codepen或某事吗?我有一个在 codepen 中使用 jasmine 2.0 和 angular 1.2.20 的示例,因此您可以分叉它:codepen.io/anon/pen/apAue
  • 试试:angular.mock.inject(function($injector) { localize = $injector.get("localize"); });

标签: angularjs unit-testing jasmine karma-jasmine


【解决方案1】:

injector 寻找_componenrToBeInjected_ 进行注射。如果你有一个服务名称localized(你确定你有一个吗?)然后用于注入 _ localize_ 所以你的 it 块应该是这样的。

it('should have a creationController', inject(function ($controller, _$rootScope_, _localize_) {
       var scope = _$rootScope_.$new();
       var localize = _localize_;
       var myCtrl1 = $controller('creationController', {
           $scope: scope,
           localize: localize
       });
       expect(myCtrl1).toBeDefined();
   }));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-29
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多