1

如何测试被事件更改的范围变量?

这是我要测试的代码:

$rootScope.$on('someEvent', function(event, option) {
  $scope.option = option;
});

我正在尝试做

describe("`someEvent`", function() {
  var option = 'Title',

  beforeEach(inject(function($injector) {
    $scope.$emit('someEvent', option);
  }));

  it("updates option", function() {
    expect($scope.option).toBe(option);
  });
});

我也试过$timeout

describe("`someEvent`", function() {
  var option = 'Title',
    $timeout;

  beforeEach(inject(function($injector) {
    $timeout = $injector.get('$timeout');
    $timeout(function() {
      $scope.$emit('someEvent', option);
    });
    $timeout.flush();
  }));

  it("updates option", function() {
    expect($scope.option).toBe(option);
  });
});

describe("`someEvent`", function() {
  var option = 'Title';

  beforeEach(inject(function($injector) {
    var $rootScope = $injector.get('$rootScope');

    $rootScope.$broadcast('someEvent', option);
  }));

  it("updates option", function() {
    expect($scope.option).toBe(option);
  });
});

但他们都因信息而失败Expected undefined to be 'Title'.

我猜是因为它是异步的,我需要一些其他语法。我用的是茉莉花。

有任何想法吗?


编辑:更新了更多尝试


修正:这是因为describe块被声明在错误的区域,$scope没有设置。与如何对 $scope.$emit 更改 angularjs 中的范围变量进行单元测试几乎相同,所以关闭它。

4

0 回答 0