Angularjs 以角度形式在字段中循环并使用量角器测试输入验证?

Angularjs 以角度形式在字段中循环并使用量角器测试输入验证?,angularjs,testing,protractor,Angularjs,Testing,Protractor,我是一个初学者&我正在尝试以角度形式遍历所有字段,并使用量角器测试输入验证是否有效。到目前为止,我失败得很惨。我的伪代码如下: //PSEUDO CODE FOR TEST PROCESS: //------------------------------ // 1.For each field requiring validation // 2.Reset test environment // 3.Populate field with dummy data // 4.Get result

我是一个初学者&我正在尝试以角度形式遍历所有字段,并使用量角器测试输入验证是否有效。到目前为止,我失败得很惨。我的伪代码如下:

//PSEUDO CODE FOR TEST PROCESS:
//------------------------------
// 1.For each field requiring validation
// 2.Reset test environment
// 3.Populate field with dummy data
// 4.Get result
// 5.Evaluate result versus expectation for test type
// 6.Pass test description & test result (true/false) to Protractor to print to command line
下面是我写的代码。这不是很好,我甚至不确定如果不为每个领域的每个验证测试指定单独的测试,是否有可能实现我的目标。我做错了什么/正确的方法是什么

describe('Sample form', function() {

// Fields subject to input validation
  var userName          = element(by.model('user.name'));           // required field
  var userSurname       = element(by.model('user.surname'));        // required field
  var userId            = element(by.model('user.id'));             // required field

// Test population
  var fieldsRequired    = [userName, userSurname, userId];          // fields to be tested

// helper function to check class of a specified element --> ng-valid / ng-invalid etc.
  var hasClass = function (element, cls) {
    return element.getAttribute('class').then(function (classes) {
      return classes.split(' ').indexOf(cls) !== -1;
    });
  };

// The testing function
  function testRequired(fieldsRequired) {
    //1. loop through each field
      for (var i = 0; i < fieldsRequired.length; i++) {

      //2. Reset page  prior to each test
        browser.get('http://sometestlink.html');      

      //3. Populate field with dummy data
        fieldsRequired[i].sendkeys();  

      //4,5 & 6. Protractor test
        it('should fail validation when ' + fieldsRequired[i] + ' is missing', expect(hasClass(fieldsRequired[i],'ng-valid')).toEqual(false));
      }
  }
});
description('Sample form',function()){
//需要输入验证的字段
var userName=element(by.model('user.name');//必填字段
var username=element(by.model('user.姓氏');//必填字段
var userId=element(by.model('user.id');//必填字段
//试验群体
var fieldsRequired=[userName,userName,userId];//要测试的字段
//用于检查指定元素-->ng valid/ng invalid等的类的帮助器函数。
var hasClass=函数(元素,cls){
返回元素.getAttribute('class')。然后(函数(类){
返回类。拆分(“”).indexOf(cls)!=-1;
});
};
//测试功能
需要功能测试(需要字段){
//1.循环遍历每个字段
对于(变量i=0;i
您的代码中有几个问题:

  • 您的
    it
    块将永远不会执行,因为您没有调用
    testRequired
    函数
  • sendkeys()
    应该是
    sendkeys()
    ,并且您没有发送任何文本,它是空的
  • 您可以尝试通过以下方式实现您描述的目标:

    describe('Sample form', function() {
    
        // helper function to check class of a specified element --> ng-valid / ng-invalid etc.
        var hasClass = function (element, cls) {
            return element.getAttribute('class').then(function (classes) {
                return classes.split(' ').indexOf(cls) !== -1;
            });
        };
    
        var fields = {
            'userName': element(by.model('user.name')),
            'userSurname': element(by.model('user.surname')),
            'userId': element(by.model('user.id'))
        };
    
        for(var field in fields) {
            (function(field) {                
                it('should fail validation when ' + field + ' is missing', function () {
                    browser.get('http://sometestlink.html');
                    fields[field].sendKeys('dummy_data');
                    expect(hasClass(fields[field], 'ng-valid')).toEqual(false);
                });
            })(field);
        };
    });