当前位置: 首页 > 面试题库 >

我如何在AngularJS中测试$ scope。$ on

宋丰
2023-03-14
问题内容

如何测试广播后是否填充了示波器?我已经搜索并在stackexchange中找到了一些质量检查,但是没有一个回答我的问题。该代码可以正常工作,只是不知道如何对其进行测试。我可以补充一点,我是测试的新手,尤其是Jasmine。

所以,这是代码:

服务CrappySvc:

update: function() {
    $rootScope.$broadcast('updatecrappy', Crappy.query());
}

控制器GetCrappyCtrl:

  $scope.$on('updatecrappy', function(event, crap) {
    $scope.crap = crap;
  });

茉莉花:

beforeEach(inject(function($rootScope, $httpBackend, $controller, Crappy) {
  rootScope = $rootScope;
  scope = $rootScope.$new();
  Crappy = mockCrappy;

      ...
  spyOn(rootScope, '$broadcast');
      ...

  ctrl = $controller('GetCrappyCtrl', {
  $scope : scope,
  Crappy : mockCrappy
});

}));

it('$scope.$on should have been triggered', function() {          
  rootScope.$broadcast('updatecrappy', [{id : 2, name : 'crappy'}]);
  expect(rootScope.$broadcast).toHaveBeenCalledWith('updscenes', [{id : 2, name : 'crappy'}]);

});

结石


问题答案:

您需要告诉Jasmine让间谍调用实际的$ broadcast函数

spyOn($rootScope, '$broadcast').andCallThrough();

如果您不使用andCallThrough()间谍,则不会执行任何操作。

jasmine文档

编辑

对于Jasmine 2,语法为

spyOn($rootScope, '$broadcast').and.callThrough();


 类似资料:
  • 问题内容: 我不知道如何使用和。官方文档没有帮助。 我不明白的是: 他们连接到DOM吗? 如何更新对模型的DOM更改? 它们之间的连接点是什么? 我尝试了本教程,但这需要对它的理解并且理所当然。 做什么和做什么,以及如何正确使用它们? 问题答案: 您需要了解AngularJS的工作原理才能理解它。 消化周期和作用域 首先,AngularJS定义了所谓的 摘要循环 的概念。这个周期可以看作是一个循环

  • 问题内容: 我已经看过一些教程和基本示例,但是我很难为控制器编写单元测试。我已经看到了一些代码片段,它们实例化了控制器并让angular注入了对象,该对象又被用来为控制器创建一个新对象。但是我不知道为什么吗? 未定义 : 我最终使用了变量,而不是变量,但是在我的第一个测试中,我不知道如何在控制器中对 功能变量 进行单元测试: 控制器: 单元测试损坏: 这就是我得到的 TypeError:对象#没有

  • 如何在AngularJS中检测onKeyUp? 我正在寻找一个'ngOnkeyup'指令,类似于ngChange,但我找不到任何合适的。 如果没有这样的指令,是否有一种干净的方法可以从浏览器本机onkeyup事件调用控制器?

  • 问题内容: 如何在AngularJS中检测onKeyUp? 我正在寻找类似于ngChange的’ngOnkeyup’指令,但是找不到合适的东西。 如果没有这样的指令,是否有一种从浏览器本地onkeyup事件调用控制器的干净方法? 问题答案: 编辑:请参阅下面的maklemenz的第二个答案,它引用了新的内置ng-keyup指令 您可以使用angular-ui库: 使用angular-ui,您可以

  • 问题内容: 我们在几个JS文件中为我们的AngularJS应用程序进行了一些量角器端到端测试,它们工作得很好。但是,在整个测试中有很多重复的代码,我们希望对此进行干燥。 例如,每次登录时,我们都必须单击文本元素,键入用户名和密码,然后单击Enter。现在,每个单个JS文件都有其自己的登录功能副本,该副本在每次测试之前都会被调用。 最好将它们重构到我们可以导入的模块中。我已经搜索了几个小时,但是找不

  • 问题内容: 我是AngularJS的新手,觉得很有趣,但是对于以下情况我不太清楚。 我分配并使用返回数据时遇到错误,无论如何我可以将返回数据分配给吗? 问题答案: 您通常不在工厂,服务或提供商内部使用。通常,您将返回(由返回),然后在控制器(您确实有)中处理promise 。 控制器功能: