2016-10-26 8 views
1

奇妙な問題分度器で私の約束を解決しようとしているとき、私はまだ分かりません。分度器で約束を解決する

deferred.fulfill(rowData);という行で何かが間違っています。rowというデータが返されないためです。

つまり、下位関数のrowData.count()は問題ありませんが、返されたときにはrow.count()が失敗しています。

this.gridFunction = function (summaryData){ 
 

 

 
    var rowData = getGridRowByText(gridRows, name, text); 
 
    
 
    rowData.then(function (row) {    
 
    // ** THROWS ERROR ** TypeError: row.count is not a function 
 
    expect(row.count()).toEqual(3); 
 

 
    row.map(function (cell) { 
 
     // iterate cell contents, compare with "summaryData" 
 
    }); 
 

 
    }); 
 
} 
 

 

 
function getGridRowByText(gridRows, grid, text) { 
 
     var deferred = protractor.promise.defer(); 
 
       
 
     var parentId = getParId(); 
 

 
     parentId.getAttribute("id").then(function (parentId) { 
 

 
      // i.e. jquery $('.grid-wrapper.fluid-wrapper #rowId_21') 
 
      var sel = '.grid-wrapper.fluid-wrapper #' + parentId; 
 
      
 
      var rowData = element(by.css(sel)).all(by.repeater('column in vm.sourceData.columns')); 
 
      
 
      // EXPECT SUCCESSFULL !!! 
 
      expect(rowData.count()).toEqual(19); 
 
      
 
      
 
      deferred.fulfill(rowData); 
 
     }); 
 
     return deferred.promise; 
 
};

主な質問:私はきちんとrowDataオブジェクトで満たさ約束を返さないのですか?

* UPDATE *

私の最終的な解決策:

それは実際に私の元の分度器の約束での作業の問題ではなく、ロジックの再設計だけでは解決しません。

this.gridFunction = function (targetRowText){ 
 

 
    
 
    var result = gridRows.all(by.cssContainingText('span', targetRowText)).first(); 
 
    var parentId = result.all(by.xpath("./ancestor::div[starts-with(@id, 'rowId')]")); 
 
     
 
     
 
    parentId.getAttribute("id").then(function (parentId) {    
 
     console.log(' (ROW-ID: ', parentId); 
 
      
 
     // further iterations here... 
 
    } 
 
    
 
}

あなたが実際にここでは、 "繰延" オブジェクトを必要としない、 ボブ

答えて

1

をお願いします。ただ、関数からの約束を返す:

function getGridRowByText(gridRows, grid, text) { 
    var parentId = getParId(); 

    return parentId.getAttribute("id").then(function (parentId) { 
     var sel = '.grid-wrapper.fluid-wrapper #' + parentId; 
     return element(by.css(sel)).all(by.repeater('column in vm.sourceData.columns')); 
    }); 
}; 

使用法:

var rowData = getGridRowByText(gridRows, name, text); 
expect(rowData.count()).toEqual(3); 

またはさらなるプロセシングがgetgridRowByText()機能に必要であれば、:

function getGridRowByText(gridRows, grid, text) { 
    var parentId = getParId(); 

    return parentId.getAttribute("id").then(function (parentId) { 
     var sel = '.grid-wrapper.fluid-wrapper #' + parentId; 

     var rowData = element(by.css(sel)).all(by.repeater('column in vm.sourceData.columns')); 

     // further processing here 
     expect(rowData.count()).toEqual(19); 

     return rowData; 
    }); 
}; 
+0

私は実際に、さらに処理を持っています行う。私は "rowData"セルの内容と以前に入力したいくつかの "summaryData"オブジェクトを比較しています。これが私が約束をセットアップした理由です。主な質問は、達成が期待どおりに行動しないのはなぜですか? 'rowData'が変更されたようです。 –

+0

@ bob.mazzo gotcha、私は、現在の問題は、 'ElementArrayFinder'が持つように' count() 'メソッドを持たない"遅延 "をしていることだと思います。私はまだあなたが手作業で約束をする必要はないと思うし、それを実現するために、別のサンプルコードを追加して関数から 'rowData'を返すことができることを実証しました(上位レベルの' return'も注意してください)。 )。ありがとう。 – alecxe

+0

はい、私は今日、以前の追加の関数呼び出しを終わらせました。それはちょうどあまりにもclunkyだった。私はあなたの追加の解決策を午前中に見直します。多くのありがとう、アレック。 –

関連する問題