vendredi 26 février 2016

Unit Test Expect SpyOn Not Found

I have a directive (restrict A) that handles an event click, and calls a service based on a value.

Directive:

define(function () {
'use strict';

var myDirective = function ($rootScope, myFactory) {
    return {
        restrict: 'A',
        scope: {
            _myValue : '=value'
        },
        link: function(scope, element, attrs) {
            element.bind('click', function() {
                if (scope._myValue === 'red') {
                    myFactory.red();
                }
                if (scope._myValue === 'green') {
                    myFactory.green();
                }
                if (scope._myValue === 'black') {
                    myFactory.black();
                }
            });
        }
    };
};

return ['$rootScope', 'myFactory', myDirective];
});

Factory:

define(['require', 'angular'], function (require, angular) { 

   'use strict';

    var myFactory = function () {    

        return {
            red: function() {
                console.log('red');
            },
            green: function() {
                console.log('green');
            },
            black: function() {
                console.log('black');
            }
        };
    };

    return myFactory;
});

Test:

define(['angular-mocks'], function () {
'use strict';

var angular = require('angular');

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

    var scope, $compile, element, myFactory;

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

    beforeEach(inject(function (_$rootScope_, _$compile_, _myFactory_) {
        scope = _$rootScope_.$new();
        $compile = _$compile_;
        var html = '<div><a my-directive  value="\'red\'"></a></div>';
        myFactory = _myFactory_;
        spyOn(myFactory , 'red').and.callThrough();
        element = $compile(angular.element(html))(scope);
        scope.$digest();

    }));

    it('should be red and call myFactory.red', function () {
        element.click();
        expect(myFactory.red).toHaveBeenCalled();
    });

With the above, i get error:

Expected spy red to have been called.

Im using Jasmine 2

Aucun commentaire:

Enregistrer un commentaire