【问题标题】:Mock a Angular 1.5 component in unit tests在单元测试中模拟 Angular 1.5 组件
【发布时间】:2016-03-17 10:44:59
【问题描述】:

我有一个基本的 angular 1.5 组件,如下所示:

angular
  .module('app')
  .component('techs', {
    templateUrl: 'app/techs/techs.html',
    controller: TechsController
  });

我想只模拟这个组件而不是整个应用程序,因为angular.mock.module('app') 模拟了应用程序的每个组件。有办法吗?
我试过angular.mock.module('techs'),但出现了这个错误:

Failed to instantiate module techs due to:
Module 'techs' is not available! You either misspelled the module name or forgot to load it

【问题讨论】:

  • 您忘记将其添加到 karma.conf.js 文件吗?
  • 不,它就在那里。
  • 你的意思是只实例化那个组件吗?为什么不想实例化整个模块?

标签: angularjs unit-testing


【解决方案1】:

你应该通过 $componentController 注入组件。

Forex: component = $componentController('Component', {yourscope}, {yourbindings});

【讨论】:

【解决方案2】:

我发现在我的角度模块定义中至少有 1 或 2 层嵌套有助于测试它们。例如,您可以这样做:

angular.module('app.ui')
    .component('techs', {
        templateUrl: 'app/techs/techs.html',
        controller: TechsController
    });

这样您就不必担心全局命名空间污染和您担心的潜在窃听。

虽然,我意识到这并不能真正直接回答您的问题。回到你的例子:

    angular.module('app')
        .component('techs', {
            templateUrl: 'app/techs/techs.html',
            controller: TechsController
         });

如果你是真正的单元测试,那么理论上 - 你只会加载这个文件本身(而不是

【讨论】:

  • 不是一个完整的答案。从字面上看。
猜你喜欢
  • 2016-11-23
  • 2017-09-15
  • 1970-01-01
  • 2020-04-19
  • 2017-08-17
  • 1970-01-01
  • 2017-05-05
  • 2020-11-19
  • 1970-01-01
相关资源
最近更新 更多