量角器将CSV文件转换为Json并读取键值

量角器将CSV文件转换为Json并读取键值,json,csv,promise,protractor,browser-automation,Json,Csv,Promise,Protractor,Browser Automation,我在库上使用以下函数,然后像这样调用它们。代码的问题是我无法从以下代码返回值: 如果有人建议将值返回到我的测试中,那就太好了。(解决后,我将发布完整的工作代码)。我还没有与承诺,所以如果有人可以建议一个解决方案,这是伟大的 解决了这个问题!!!检查我的答案: 我的测试用例 iit("Should Find the OrderID and update task and submit", function () { var job_id_data= lib.getTestData(

我在库上使用以下函数,然后像这样调用它们。代码的问题是我无法从以下代码返回值:

如果有人建议将值返回到我的测试中,那就太好了。(解决后,我将发布完整的工作代码)。我还没有与承诺,所以如果有人可以建议一个解决方案,这是伟大的

解决了这个问题!!!检查我的答案:

我的测试用例

iit("Should Find the OrderID and update task and submit", function () {    
    var job_id_data= lib.getTestData('MYPROJ_TESTCASE_001'); //Problem area     
    console.log(job_id_data);
    element(by.xpath('//input[@type=\'search\']')).sendKeys(job_id_data);
   //Do other stuff
}
我的函数(lib)中的以下代码需要返回一个承诺,我不知道如何返回:(

完全不工作代码…代码

   var lib = require('./lib/library.js');
   iit("should go to logout page", function () {    
    var id_data= lib.getTestData('Test.3'); 
    //plan to use this value in my tests
   });

   //Library
   function getTestData(jobreference) {
    //Converter Class 
    var Converter=require("csvtojson").core.Converter;
    var fs=require("fs"); 
    var csvFileName="C:\\TestData.csv"; 

    var fileStream=fs.createReadStream(csvFileName);
    //new converter instance 
    var param={};
    var csvConverter=new Converter(param);  
    var returnKeyValue="";  
    var result = {};    

    //This requires a code change: 
csvConverter.on("end_parsed",function(jsonObj){
     //console.log(jsonObj); //here is your result json object      
     var foundTestData = getObjects(jsonObj, 'TC', jobreference);
     console.log(returnKeyValue ); //I can see this value                    
     returnKeyValue = getValues(foundTestData, 'JOBID');   // I cannot return this??
});

//read from file 
fileStream.pipe(csvConverter);  
return returnKeyValue;
    }

   function getValues(obj, key) {
   var objects = [];
   for (var i in obj) {
    if (!obj.hasOwnProperty(i)) continue;
    if (typeof obj[i] == 'object') {
        objects = objects.concat(getValues(obj[i], key));
    } else if (i == key) {
        objects.push(obj[i]);
    }
}
return objects;
   }

   function getObjects(obj, key, val) {
var objects = [];
for (var i in obj) {
    if (!obj.hasOwnProperty(i)) continue;
    if (typeof obj[i] == 'object') {
        objects = objects.concat(getObjects(obj[i], key, val));    
    } else 
    //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not)
    if (i == key && obj[i] == val || i == key && val == '') { //
        objects.push(obj);
    } else if (obj[i] == val && key == ''){
        //only add if the object is not already in the array
        if (objects.lastIndexOf(obj) == -1){
            objects.push(obj);
        }
    }
}
return objects;
   }
在同事的帮助下成功解决了此问题(谢谢)

这篇文章帮助我快速切入要点

解决方案是我将函数更新为以下内容,它基本上与量角器一起工作。这很好

function getTestData(jobreference) {
var Converter=require("csvtojson").core.Converter;
var fs=require("fs"); 
var csvFileName="TESTJOB.csv";      
var fileStream=fs.createReadStream(csvFileName);
var csvConverter=new Converter(param);  

//new converter instance 
var param={};
var csvConverter=new Converter(param);  
var d = protractor.promise.defer();
csvConverter.on("end_parsed",function(jsonObj){
     var foundTestData = getObjects(jsonObj, 'TCaseID', jobreference);                   
     returnKeyValue = getValues(foundTestData, 'ID');
     console.log(returnKeyValue.toString());
     d.fulfill(returnKeyValue.toString());       
});     
//d.reject("fail!!!!"); 
fileStream.pipe(csvConverter);          
return d.promise;   
}
function getTestData(jobreference) {
var Converter=require("csvtojson").core.Converter;
var fs=require("fs"); 
var csvFileName="TESTJOB.csv";      
var fileStream=fs.createReadStream(csvFileName);
var csvConverter=new Converter(param);  

//new converter instance 
var param={};
var csvConverter=new Converter(param);  
var d = protractor.promise.defer();
csvConverter.on("end_parsed",function(jsonObj){
     var foundTestData = getObjects(jsonObj, 'TCaseID', jobreference);                   
     returnKeyValue = getValues(foundTestData, 'ID');
     console.log(returnKeyValue.toString());
     d.fulfill(returnKeyValue.toString());       
});     
//d.reject("fail!!!!"); 
fileStream.pipe(csvConverter);          
return d.promise;   
}