2015-02-11 80 views
0

我在库上使用以下函数,然后像这样调用它们。代码的问题是,我不能从下面的代码中返回值:量角器将CSV文件转换为Json并读取键值

如果有人建议将值返回给我的测试,那将会很棒。 (一旦解决了这个问题,我会发布完整的工作代码)。我没有与诺言合作过,所以如果有人能提出一个很好的解决方案!

解决了!!!检查我的回答:

我的测试用例

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)下面的代码需要返回一个承诺,我不知道该怎么做:(

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

完全不工作的代码...代码

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

回答

0

托管与我的同事一些帮助来解决这个:) (感谢:))

这张贴在这里帮助我迅速切入正题

http://know.cujojs.com/tutorials/promises/creating-promises

的解决方案是我更新的功能,下面,基本上与量角器少辉的作品。这很棒。

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