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

使用Karma和Angular的Jasmine模拟链接方法

宇文鸿畴
2023-03-14
问题内容

我想嘲笑angular.element。我想确保angular.element已经被调用了一定的次数,并且也anguler.element.attr已经被调用了。

我有以下代码:

var things = $scope.getThings();

for (var i = 0; i < things.length; i++) {
  if (things[i].type == "xyz") {
    angular.element("#thing-" + things[i].id)
      .attr("foo", things[i].bar);
  };
};

在我的测试中,我有:

var things = [
  {
    id: 1,
    type: "xyz",
    bar: 10
  },
  {
    id: 2,
    type: "abc",
    bar: 33
  }
];

spyOn($rootScope, "getThings").and.returnValue(things);
spyOn(angular, "element").and.returnValue();

$rootScope.doThings(); // call controller method

expect(angular.element.calls.count()).toBe(1);

但是它给出了以下错误:

TypeError:未定义不是对象(评估’angular.element(“#thing-” + Things [i] .id).attr’)

我还希望我的测试具有以下内容:

expect(angular.element.attr.calls.count()).toBe(1);
expect(angular.element.attr).tohaveBeenCalledWith("foo", things[0].bar);

问题答案:

监视或模拟链接方法的方式仅取决于如何在被监视对象上定义它们。

在Angular
jqLit​​e的情况下,或者在您的情况下,jQuery(都是通过angular.element立面透明地提供服务)的链接方法是在构造函数原型上定义的,该方法在工厂函数中显示为angular.element.prototypeor
jQuery.prototype(或angular.element === jQuery在加载jQuery时)。

为了监视两者angular.elementangular.element(...).attr应该是:

spyOn(angular, 'element').and.callThrough();
spyOn(angular.element.prototype, 'attr').and.callThrough();
...
expect(angular.element).toHaveBeenCalled();
expect(angular.element.prototype.attr).toHaveBeenCalled();

callThrough 在这种情况下非常重要,因为否则整个链都应该手动存根。



 类似资料:
  • 问题内容: 我刚刚跳到另一个项目,并且基本上,我被要求编写单元测试。因为我已经了解Protractor的e2e测试,所以我现在切换到Karma和Jasmine进行单元测试。我已经下载了业力,茉莉花,业力茉莉花和业力铬发射器。我也安装了角angular,所以应该准备开始了。我已经在互联网上阅读了很多东西,但是现在,我真正需要的是一个真实应用程序的具体示例,以弄清楚如何开始编写测试。我不需要简单的示例

  • 问题内容: 我正在努力使用Karma + Jasmine测试AngularJS工厂。 我无法将工厂注入变量。 我究竟做错了什么? 注意:文件已正确加载 厂: 码: 输出: 问题答案: 您需要致电:

  • 我正在Jenkins CI建立一个带自动测试的Angular 4 SPA。SPA是一个更大的、由Maven管理的项目的一部分,因此构建也是由Maven进行管理的。到目前为止,我已经: 在Jenkins上安装NodeJS插件,使用安装来自版本为8.6.0的nodejs.org 配置“要安装的全局npm软件包”=“karma-cli phantomjs-预构建的jasmine-core karma-j

  • 本文向大家介绍JavaScript测试工具之Karma-Jasmine的安装和使用详解,包括了JavaScript测试工具之Karma-Jasmine的安装和使用详解的使用技巧和注意事项,需要的朋友参考一下 1.Karma介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma。Karma是一个让人感到非常神

  • 本文向大家介绍使用Jasmine和Karma对AngularJS页面程序进行测试,包括了使用Jasmine和Karma对AngularJS页面程序进行测试的使用技巧和注意事项,需要的朋友参考一下 AngularJS是继jQuery之后发生在JavaScript上最好的东西。这也是JavaScript开发一直以来想要的方式。Angular主要的优点之一就是它的依赖注入(Dependency Inje

  • 问题内容: 人们经常会问诸如此类的AspectJ问题,因此我想在一个我以后可以轻松链接的地方回答它。 我有这个标记注释: 现在,我注释这样的接口和/或方法: 这是一个小的驱动程序应用程序,它也实现了该接口: 现在,当我定义此方面时,我希望它会被触发 为每个构造函数执行带注释的类,并 每次执行带注释的方法。 不幸的是,方面没有打印任何内容,就像类Application和方法two()没有任何@Mar