【问题标题】:Mocking depends for directives模拟依赖于指令
【发布时间】:2014-06-11 17:42:51
【问题描述】:

我有一个开始的指令

angular.module('App')
  .directive('pong', function ($window) {

然后我将如何在测试中模拟 $window?我在想一些这样的东西,但不确定在哪里通过模拟的 $window。

// Initialize the controller and a mock scope
beforeEach(inject(function ($injector, $rootScope) {
  scope = $rootScope.$new();
  scope.testValue = null;
  $window = $injector.get('$window');
}));

function compileDirective(tpl) {
  if (!tpl) {
    tpl = '<button pong="{{testValue}}">Test</button>';
  }

  inject(function($compile) {
    element = $compile(tpl)(scope);
  });

  scope.$digest();
} 

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    您可以提供类似的模拟值(您必须在注入方法调用之前放置此声明)

    beforeEach(function () {
      module(function ($provide) {
        $provide.value('$window', mockWindow);
      });
    });
    

    那么你必须在 mockWindow 对象上创建一些间谍 - 因为你期望 $window 中的某些方法会被调用。

    【讨论】:

      【解决方案2】:

      https://stackoverflow.com/a/20694691/2956716 中所述,您需要覆盖服务的提供者。

      例如,(我没有测试过这个!)

      beforeEach(module(function ($provide) {
          $provide.provider('$window', $window); 
      }));
      

      其中 $window 是您之前注入 $window 的变量。

      【讨论】:

        猜你喜欢
        • 2019-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多