簡體   English   中英

如何測試加載事件的指令?

[英]How can I test a directive for a load event?

所以,我做了這個簡單的指令

angular
    .module('cherrytech.common', [])
    .directive('ctOnload', function() {
        return {
            restrict: 'A',
            scope: {
                callback: '&ctOnload'
            },
            link: function(scope, element) {
                element.on('load', function(event) {
                    scope.callback({ event: event });
                });
            }
        };
    });

而且工作正常,完全沒有問題。 元素完成加載后,將使用事件對象調用該回調。 我正在將其用於iframe,但是應該可以在支持load事件的任何元素上使用。

但是后來我想測試一下。 我正在使用具有默認配置的testem,並且正在嘗試這個簡單的測試代碼,但無法使其正常工作:

describe('Directive: ctOnload', function() {
    var element, scope;

    beforeEach(module('cherrytech.common'));

    beforeEach(inject(function($rootScope, $compile) {
        scope = $rootScope;

        element = '<iframe src="about:blank" ct-onload="loadCallback(event)"></iframe>';

        scope.loadCallback = function(event) { console.log(event); };

        element = $compile(element)(scope);
        scope.$digest();
    }));

    it('should call the scope callback', function() {
        spyOn(scope, 'loadCallback');
        element.triggerHandler('load');
        expect(scope.loadCallback).toHaveBeenCalled();
    });
});

通常我沒有任何問題測試指令,但是此事件回調使我發瘋。 無論我做什么,我都無法在測試用例上觸發加載事件。 如果我將ct-onload替換為ng-click並觸發click事件,那么一切都會按預期進行。 這到底是怎么回事? 這是一個睾丸問題嗎?

您應調用digest通知角度發生了一些變化:

element.on('load', function(event) {
    scope.callback({ event: event });
    scope.$digest();
});

我決定殺死Testem,然后使用Chrome啟動器返回業力。 一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM