Jasmine simula métodos encadenados con Karma y Angular

Quiero burlarmeangular.element. Y quiero asegurarangular.element ha sido llamado una cierta cantidad de veces y queanguler.element.attr ha sido llamado también.

Tengo el siguiente código:

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);
  };
};

En mi prueba tengo:

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);

Pero da el siguiente error:

TypeError: undefined no es un objeto (evaluando 'angular.element ("# thing-" + things [i] .id) .attr')

También quiero que mi examen tenga algo como:

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta