4

所以我熟悉使用 $controller 构造函数模拟 $scope 和控制器的概念

var scope = rootScope.$new();
it('should contain a testVar value at "test var home"', function(){
    homeCtrl = $controller('homeCtrl', {
        $scope: homeScope,
        $rootScope: rootScope
    })

    expect(homeScope.testVar).toBe('test var home');
})

有没有办法以同样的方式模拟指令?指令及其控制器?

//mock coding
var scope = rootScope.$new();
it('should contain a testVar value at "test var home"', function(){
    homeDir = $directive('homeCtrl', {
        $scope: homeScope,
        $elem: angular.element('<div....</div>'),
        $att: {}
        $modelViewController: angular.element().controller('ngModel')
    })
            homeCtrl = homeDir.$getController();
    expect(homeScope.testVar).toBe('test var home');
})

该问题旨在针对指令,如何测试它们?如何提取它们的成分?据我所知,如果我在指令上有一个函数,我需要将它附加到一个范围,否则如果它属于指令,那么该函数是不可测试的。所以如果我想在测试期间使用范围如何将范围注入变量?

4

1 回答 1

6

我设置指令规格的方式是

beforeEach(inject(function($rootScope, $compile) {
    var htmlString = '' +
        '<my-directive some-attr="value">' +
        '</my-directive>'
        ;
    element = angular.element(htmlString)
    scope = $rootScope.$new();
    $compile(element)(scope);
    scope.$digest();
}));

基本上,我编译了一个 HTML 字符串来声明我的指令并使用我注入的范围运行生成的函数。然后我使用 JQuery(或 JQueryLite)elementscope

于 2013-10-23T05:42:40.950 回答