在Angular version1中,如何测试我的范围。$ on on listener是否被调用?

时间:2016-07-19 16:29:03

标签: javascript angularjs unit-testing testing jasmine

在Angular version1中,如何测试我的范围。$ on on listener?

这是我的代码:

$scope.$on("pagination:getCardExpandData", (event, cardObj) => $scope.loadLocationCardExpandedData(cardObj));

这是我的测试:

  it("should call loadLocationCardExpandedData function on emit", function () {
     scope.$emit('pagination:getCardExpandData', {});

     expect(scope.$on.calledWith("pagination:getCardExpandData", {})).toEqual(true);
     expect(scope.loadLocationCardExpandedData).toHaveBeenCalled();
  });

这是我得到的错误:预期false等于true。

我正在使用karma runner与jasmine和JavaScript。

2 个答案:

答案 0 :(得分:1)

做一个$ digest,所以angular知道要更新。

scope.$emit('pagination:getCardExpandData', {});
scope.$digest();

或者你可以听父母范围:

var called = false;
$rootScope.$on('pagination:getCardExpandData', function(){
    called = true;
});

答案 1 :(得分:1)

为了实现这一点,我需要这样做:

scope.$emit('pagination:getTabPage', "next", function(){
        expect(scope.$on.calledWith("pagination:getTabPage", "next")).toEqual(true);
        expect(scope.loadLocationTab).toHaveBeenCalled();
     });