gpt4 book ai didi

angularjs - 在 Angular 形式指令的单元测试中为输入字段设置 View 值

转载 作者:行者123 更新时间:2023-12-03 08:10:59 27 4
gpt4 key购买 nike

我有一个构建表格的指令:

app.directive('config', function() {
return {
restrict: 'E',
scope: {
data: '='
},
template: '<form name="configForm">' +
'<input type="number" max="10" ng-model="config.item" name="configItem"/>' +
'<div class="form-error" ng-show="configForm.$error.max">Error</div>' +
'</form>',
controller: 'ConfigDirectiveController',
};
});

我要做的是通过单元测试来验证,如果有一些输入,错误消息将显示出来。使用angular 1.2,我可以修改$ scope.config.item,它将更新 View 值并显示错误。

据我所知,在 Angular 为1.3的情况下,如果模型未通过验证,则 View 值不会更新...因此我需要修改 View 值以确保显示错误消息。

如何获得对“configItem”输入的访问权限,以便可以设置 View 值以确保显示错误消息?

编辑以显示单元测试

我看到该值设置正确,但是错误仍然将ng-hide应用于标签。当我查看页面并手动更改输入值时,如果我输入的值大于10,则ng-hide将被删除并且将显示错误。
  beforeEach(inject(function($compile, $rootScope) {
element = angular.element('<config data="myData"></config>');
$scope = $rootScope.$new();
$scope.myData = {};
element = $compile(element)($scope);
}));

it('should warn that we have a large number', function() {
var input = element.find('[name="configItem"]')[0];
$scope.$apply(function() {
angular.element(input).val('9000000001');
});
errors = element.find('[class="form-error ng-binding"]');
expect(errors.length).toBe(1);
})

最佳答案

这是我对基于输入的指令进行单元测试的方式(为清晰起见,省略了很多代码!)您要遵循的重要内容是:

angular.element(dirElementInput).val('Some text').trigger('input');

这是完整的单元测试:
  it('Should show a red cross when invalid', function () {

dirElement = angular.element('<ng-form name="dummyForm"><my-text-entry ng-model="name"></my-text-entry></ng-form>');

compile(dirElement)(scope);
scope.$digest();

// Find the input control:
var dirElementInput = dirElement.find('input');

// Set some text!
angular.element(dirElementInput).val('Some text').trigger('input');
scope.$apply();

// Check the outcome is what you expect! (in my case, that a specific class has been applied)
expect(dirElementInput.hasClass('ng-valid')).toEqual(true);
});

关于angularjs - 在 Angular 形式指令的单元测试中为输入字段设置 View 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26372729/

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