Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 基于范围值的单元测试指令单击事件_Angularjs_Unit Testing_Angularjs Directive_Jasmine_Karma Jasmine - Fatal编程技术网

Angularjs 基于范围值的单元测试指令单击事件

Angularjs 基于范围值的单元测试指令单击事件,angularjs,unit-testing,angularjs-directive,jasmine,karma-jasmine,Angularjs,Unit Testing,Angularjs Directive,Jasmine,Karma Jasmine,我有一个指令属性,它传递一个值并基于该值执行一个操作: define(function () { 'use strict'; var myDirective = function ($rootScope, myFactory) { return { restrict: 'A', scope: { _myValue : '=value' }, link: function(scope, element

我有一个指令属性,它传递一个值并基于该值执行一个操作:

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];
});
HTML:

工厂示例:

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

我会在每个之前的
中添加一个这样的间谍:

spyOn(myFactory, 'red');
然后检查是否已调用:

expect(myFactory.red).toHaveBeenCalled();

当然,您必须注入
myFactory

谢谢,很好的解决方案。我必须定义我的工厂吗?间谍走在我前面吗?之后?声明一个
myFactory
var,就像您对'scope
所做的那样。然后,注入
\u myFactory\`并将其影响到
myFactory
var:
var myFactory=\u myFactory\
。就这样。然后,尽快放置spy(在
编译之前
slidingMenuFactory
应该是
myFactory
。您的工厂是什么样子的?它可能是您需要使用“new myFactory()”创建的对象吗..?您正在使用模块加载器。有一些步骤需要遵循,以便您可以对工厂进行单元测试。请查看:。顺便说一句,这超出了该问题的范围。请发布另一个线程,并检查我的答案是否符合您(第一)的需要。
Error: spyOn could not find an object to spy upon for red()
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;
});
spyOn(myFactory, 'red');
expect(myFactory.red).toHaveBeenCalled();