模拟取决于指令

时间:2014-06-11 17:42:52

标签: angularjs angularjs-directive

我有一个像

一样的指令
angular.module('App')
  .directive('pong', function ($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();
} 

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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

然后你必须在mockWindow对象上创建一些间谍 - 因为你期望从$ window中调用一些方法。