如何在Angular指令的单元测试中触发单击事件

时间:2014-07-30 20:58:27

标签: asp.net-mvc angularjs angularjs-directive tdd chutzpah

我有一个Angular应用程序(从ASP.NET MVC项目运行。)

在这个应用程序中,我有一个带有以下链接功能的指令:

    link: function (scope, element, attrs, formCtrl) {
        element.bind('click', function (event) {
            formCtrl.$setPristine();
        });

    }

我写了这个测试:

var $compile,
        $rootScope,
        form;

    beforeEach(module('points'));

    beforeEach(inject(function(_$compile_, _$rootScope_, testHelper){
        $compile = _$compile_;
        $rootScope = _$rootScope_;
        testHelper.expectBaseRoute();
    }));

    it('Should set form to pristine when clicked', function () {
        var scope = $rootScope;

        form = $compile('<form name="testForm" unsaved-warning-clear><input name="test" ng-model="value"/></form>')(scope);
        scope.value = "abc";
        scope.$digest();

        scope.testForm.test.$setViewValue('def');

        expect(scope.testForm.$pristine).toBe(false);

        $(form).trigger('click');

        expect(scope.testForm.$pristine).toBe(true);
    });

如果我使用Jasmine在浏览器中运行它,则测试通过。

如果我在ide中使用chutzpah运行它,它就会失败。它永远不会触发click事件。

我有什么遗失的吗?

1 个答案:

答案 0 :(得分:0)

就我而言,这是一个愚蠢的用户错误事件。

我从浏览器运行的Jasmine测试运行器文件有jquery,然后是角度引用。

我的chutzpah.json文件的顺序是反向的。

我移动了jquery引用并开始工作。