gpt4 book ai didi

unit-testing - 如何在 Angular 单元测试中从指令而不是 Controller 模拟范围

转载 作者:行者123 更新时间:2023-12-05 00:28:03 25 4
gpt4 key购买 nike

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

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

有没有办法以同样的方式模拟指令?指令及其 Controller ?
//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');
})

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

最佳答案

我设置指令规范的方式是

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 字符串来声明我的指令并使用我注入(inject)的范围运行生成的函数。然后我使用 JQuery(或 JQueryLite)与 element 进行交互。或直接在 scope 上进行断言

关于unit-testing - 如何在 Angular 单元测试中从指令而不是 Controller 模拟范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com