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

时间:2016-08-26 05:41:03

标签: angularjs unit-testing ionic-framework jasmine

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

expect($rootScope.$broadcast).not.toHaveBeenCalled();

问题是有时会广播$ 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;

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

谢谢

1 个答案:

答案 0 :(得分:0)

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

是不是$ locationChangeStart和$ locationChangeSuccess在其他一切之前被解雇了?甚至在$ rootScope之前?据我所知$ locationChangeStart具有更高的优先级,然后是$ rootScope。

app.on(function(){})中有什么内容吗? ?