我如何对$ scope进行单元测试。$ emit更改angularjs中的范围变量?

时间:2013-10-01 16:22:15

标签: javascript angularjs jasmine angularjs-scope

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

这是我要测试的一些代码:

$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尚未设置。与How do I unit test $scope.$emit changing a scope variable in angularjs?几乎相同,所以关闭它。

0 个答案:

没有答案