0

したがって、href 関数を模倣するディレクティブがありますが、ボタンで実行できるようにしたい場合を除きます (タグを css したくないとします)。

app.directive('ngRef', function($location, $timeout){
    linkFn = function(sco,ele,att){
        ele.bind('click', function(){
//            console.log($location);
            $timeout(function(){
                $location.path(att.ngRef);
            }, 0);
        })
    }
    return linkFn;
})

ここで、クリック時に mockLocation が新しい場所にパスされるかどうかを確認するテストを作成します。

describe('ngRef', function(){
    var mockLoc, mockTimeout, mockCompile, rootScope;

    beforeEach(function(){
        module('mySite')
        inject(function($injector){
            mockLoc = $injector.get('$location');
            mockTimeout = $injector.get('$timeout');
            mockCompile = $injector.get('$compile');
            rootScope = $injector.get('$rootScope');
        })  
    })

    it('should land on the page of the ngRef attribute on click event', function(){
        var elem = angular.element('<button ng-ref="/contact">Click</button>');
        expect(rootScope.activePage).toBe('HOME');
        mockLoc.path('/home')
        mockCompile(elem)(rootScope.$new())

        elem.trigger('click');
        rootScope.$apply();
        setTimeout(function(){
            console.log(rootScope.activePage);
            expect(mockLoc.path()).toBe('CONTACT');     
        }, 0)
    })
})

しかし今、私はそれが常にテストに失敗したことに気付きました.私の主張の何が問題なのですか.

4

1 に答える 1

0

Angular 1.2.0 を使用していると仮定すると、テストで ngRoute をロードし、構成に含まれていることを確認する必要があると思います。

beforeEach(module('ngRoute'));

単体テストから得られる出力エラー メッセージを含めていただけると助かります。

于 2013-11-13T22:50:05.310 に答える