I want to mock angular.element
. And I want to ensure angular.element
has been called a certain amount of times and that anguler.element.attr
has been called too.
I have the following code:
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);
};
};
In my test I have:
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);
But it gives the following error:
TypeError: undefined is not an object (evaluating
'angular.element("#thing-" + things[i].id).attr')
I also want my test to have something like:
expect(angular.element.attr.calls.count()).toBe(1);
expect(angular.element.attr).tohaveBeenCalledWith("foo", things[0].bar);
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…