Angularjs 广播后的单元测试指令范围功能

Angularjs 广播后的单元测试指令范围功能,angularjs,unit-testing,angularjs-directive,jasmine,karma-jasmine,Angularjs,Unit Testing,Angularjs Directive,Jasmine,Karma Jasmine,我有一个简单的指令,在link函数中有一个$broadcast receiver$on。收到后,将调用作用域函数: return { restrict: 'E', link: function($scope, element, attrs) { $scope.createCart = function () { // Create cart } function getProductList() {

我有一个简单的指令,在link函数中有一个$broadcast receiver$on。收到后,将调用作用域函数:

return {
    restrict: 'E',
    link: function($scope, element, attrs) {


        $scope.createCart = function () {
             // Create cart
        }

        function getProductList() {
             // get products lists
        }


        $scope.$on('create-shopping-cart', function() {
            $scope.createCart();
            getProductList();
        });

    }
};
我试过:

describe('<-- myDirective Spec ------>', function () {

    var scope, $compile, element, $httpBackend;

    beforeEach(angular.mock.module('myApp'));

    beforeEach(inject(function (_$rootScope_, _$compile_, _$httpBackend_) {
        scope = _$rootScope_.$new();
        $compile = _$compile_;
        $httpBackend = _$httpBackend_;

        var html = '<my-directive"></my-directive>';
        element = $compile(angular.element(html))(scope);

        spyOn(scope, '$on').and.callThrough();
        scope.$digest();
    }));

    it('should be defined', function () {
        expect(element).toBeDefined();
    });

    it('should broadcast ', function () {
        scope.$broadcast('create-shopping-cart');
        scope.$digest();
        expect(element.isolateScope().createCart()).toHaveBeenCalled();
    });
});

如何测试$scope.createCart();和getProductList();是否调用?

您的指令似乎没有
隔离作用域
,您应该调用
元素.scope().createCart()
,或者更好地调用
范围.createCart()
一个与元素相同的东西。scope().createCart()我得到-TypeError:“未定义”不是函数(计算“element.scope().createCart()”)对于scope.createCart(),我得到了TypeError:“undefined”不是一个函数(计算“scope.createCart()”),如果我这样做,则期望(scope.createCart).tohaveBeenCall();我得到错误:预期是间谍,但未定义。正确,我认为
spyOn(作用域,$on')
是您的
本地的。在每个
函数之前,将其设置为全局。。
TypeError: 'undefined' is not an object (evaluating 'element.isolateScope().createCart')