angularjs - 单元测试时如何在 Angular 1.5 中向 $componentController 添加依赖项

标签 angularjs testing dependencies components

我想在组件中向我的 Controller 添加依赖项:

这是我的组件:

angular
  .module('app')
  .component('myComponent', {
    template: '<div>some content</div>',
    controller: ["$routeParams", function ($routeParams) {
       var ctrl = this;
       ctrl.myId = $routeParams.id;
  });

现在我只想按如下方式测试它:

describe("spec for myComponent", function () {

  var $componentController;
  var $routeParams;

  beforeEach(module('app'));
  beforeEach(inject(function (_$componentController_, _$routeParams_) {
    $componentController = _$componentController_;
    $routeParams = _$routeParams_;
    $routeParams = {
      myId: 42
    }
  }));

  it('should init', function () {

    var ctrl = $componentController('myComponent', $routeParams, null);

    expect(ctrl.myId).toBe(42);

  });
});

但不幸的是 ctrl.myId 未定义 因为 $routeParams 没有被正确注入(inject)。为什么?

最佳答案

我和你的情况非常相似,用谷歌搜索了一段时间但几乎什么也没找到,但最后我自己解决了这个问题:这是你的案例的解决方案:

describe("spec for myComponent", function () {

  var $componentController;
  var mockRouteParams = {id : 1};

  beforeEach(module('app'));

  beforeEach(inject(function (_$componentController_) {
    $componentController = _$componentController_;
  }));

  it('should init', function () {

    var ctrl = $componentController('myComponent', {$routeParams:mockRouteParams}, null);

    expect(ctrl.myId).toBe(1);

  });
});

同时检查 Mocking $routeParams in a test in order to change its attributes dynamically关于 $routeParams 的模拟。

关于angularjs - 单元测试时如何在 Angular 1.5 中向 $componentController 添加依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39895969/

相关文章:

javascript - 如何推送添加新数据的数组并使用 Angular 进行编辑?

ios - CocoaPods:在 pod 中使用静态库

jakarta-ee - 如何从Eclipse中排除Maven测试范围的依赖项(但将其保留在单元测试的路径中)

.net - 如何创建行特定的 sql 缓存依赖项?

javascript - 删除时的 Angular ng-repeat 动画

angularjs - 在 AngularJS 指令中定义动态 Controller ?

angularjs - 资源解析后,在 ngResource 对象的 $promise 属性的 then() 函数中获取响应 header ?

ruby-on-rails - FactoryGirl 创作不会出现在 Selenium 测试中

java - Hibernate 类的模拟对象

ruby - 单元测试应该复制功能还是测试输出?