javascript - $routeUpdate 未在 Angular 业力单元测试中广播?

标签 javascript angularjs unit-testing jasmine

app.js

  'use strict';

angular
  .module('scrCliApp', [
    'ngRoute',
    'ui.bootstrap'
  ])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/search', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        reloadOnSearch: false
      })
      .otherwise({
        redirectTo: '/search'
      });
  });

main.js Controller

angular.module('scrCliApp')
  .controller('MainCtrl', function ($scope) {
    $scope.$on('$routeUpdate', function(/*scope, next, current*/) {
      console.log('i was called'); //never logs
    });
  });

main.js 测试

    'use strict';

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

  // load the controller's module
  beforeEach(module('scrCliApp'));

  var MainCtrl,
    scope,
    rootScope,
    location;

  // Initialize the controller and a mock scope
  beforeEach(inject(function ($controller, $rootScope, $location) {
    rootScope = $rootScope;
    location = $location;
    scope = $rootScope.$new();
    MainCtrl = $controller('MainCtrl', {
      $scope: scope
    });
  }));

  it('do call', function () {
    location.search('q', 'b');
    scope.$apply();
  });
});

运行测试时,“我被叫”永远不会记录。

最佳答案

也许您应该自己广播该事件,然后测试如何处理它:

it('do call', function () {

    scope.$emit('$routeUpdate', [1,2,3]);
    scope.$apply();

    expect....
});

关于javascript - $routeUpdate 未在 Angular 业力单元测试中广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245803/

相关文章:

unit-testing - 有没有某种方法可以构建包含测试文档字符串的 Rust 文档?

c# 检查线程池和其他线程

Safari 浏览器中的 Javascript 日期对象问题

JavaScript 全屏 API

javascript - 使用 Angular 根据对象的年龄显示不同的时间戳

jquery - 事件类被添加到 HTML 而不是它的属性

javascript - 停止监听滚动事件直到数据加载

javascript - 如何获取可视屏幕的高度

javascript - AngularJS + Mongoose : TypeError: Cannot read property 'model' of undefined

javascript - 在 Mocha 中使用 async/await - 测试挂起或以未处理的 promise 拒绝结束