0

这很可能是我不知道如何使用 Karma。假设我有一个像这样的 angularJS 样板测试

'使用严格';

describe('Controller: MainCtrl', function () {

  // 加载控制器模块
  beforeEach(module('testingApp'));

  var MainCtrl,
    范围;

  // 初始化控制器和模拟范围
  beforeEach(inject(function ($controller) {
    范围 = {};
    MainCtrl = $controller('MainCtrl', {
      $范围:范围
    });
  }));

  it('应该将 awesomeThings 列表附加到范围', function () {
    期望(范围.awesomeThings.length).toBe(3);
  });
});

如果我像这样在我的控制器中插入一个 $emit

'使用严格';

angular.module('testingApp')
  .controller('MainCtrl', function ($scope) {
    $scope.awesomeThings = [
      'HTML5 样板',
      'AngularJS',
      '业力'
    ];

    $scope.$emit('helloWorld');
  });

我的测试现在失败并说

TypeError: Object # has no method '$emit'
任何帮助深表感谢!

4

1 回答 1

1

不要提供空对象作为范围,而是使用:

$scope = $rootScope.$new()

所以你的代码是:

// Initialize the controller and a mock scope
  beforeEach(inject(function ($controller) {
    scope = $rootScope.$new();
    MainCtrl = $controller('MainCtrl', {
      $scope: scope
    });
  }));
于 2013-04-08T07:35:52.723 回答