离子单元测试中广播的意外$ locationChangeStart和$ locationChangeSuccess事件

Ale*_*sov 7 unit-testing jasmine angularjs ionic-framework

我正在实施离子应用程序的单元测试,需要检查$ rootScope上没有广播任何事件

expect($rootScope.$broadcast).not.toHaveBeenCalled();
Run Code Online (Sandbox Code Playgroud)

问题是有时会广播$ locationChangeStart和$ locationChangeSuccess事件,这会使我的测试失败.似乎离子v1.3.0触发了以下代码中的那些

// update browser
$rootScope.$watch(function $locationWatch() {
  var oldUrl = trimEmptyHash($browser.url());
  var newUrl = trimEmptyHash($location.absUrl());
  var oldState = $browser.state();
  var currentReplace = $location.$$replace;
  var urlOrStateChanged = oldUrl !== newUrl ||
    ($location.$$html5 && $sniffer.history && oldState !== $location.$$state);

  if (initializing || urlOrStateChanged) {
    initializing = false;

    $rootScope.$evalAsync(function() {
      var newUrl = $location.absUrl();
      var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl,
          $location.$$state, oldState).defaultPrevented;
Run Code Online (Sandbox Code Playgroud)

上面的代码中的"初始化"标志为true,这会触发$ rootScope.$ broadcast.问题 - 为什么会这样?处理这种情况的最佳方法是什么?现在我添加了$ rootScope.$ digest(); 在我的测试中表现出来似乎解决了问题,但我不确定这是否是有效的解决方案

谢谢

TSl*_*tis 0

这可能更像是评论而不是答案,但我没有足够的声誉来撰写评论。

$locationChangeStart 和 $locationChangeSuccess 不是在其他所有事情之前被触发吗?甚至在 $rootScope 之前?据我了解 $locationChangeStart 的优先级高于 $rootScope。

你在 app.on(function () {}); 中有什么东西吗??