2015-09-01 36 views
1

我想評估是否從一個表(table.getData())是一個2D數組返回的數據包含另一個數組。斷言數組包括Chai

在控制檯中,期望的數據出現在從table.getData()調用返回的2D數組中,但斷言失敗。

this.Then(/^I see my account balances as follows:$/, function (tableData, done) { 
     var balanceAggregationPage = new BalanceAggregationPage(this.app.pagesContainer), 
      table = balanceAggregationPage.getAccountsTable(); 

     var rows = tableData.getRows(); 
     rows.shift(); 

     var actualBalances = []; 
     rows.syncForEach(function (item) { 
      var row = item.raw(); 
      row[7] = moment(parseInt(row[7], 10)).format('DD MMM YYYY hh:mm'); 

      actualBalances.push(row); 
     }); 
     exp(table.getData()).to.eventually.include(actualBalances).notify(done); 
    }); 

任何人都可以幫忙嗎? 謝謝

回答

1

您可以結合包括members()

斷言目標是集合的超集,或者目標和集合具有相同的嚴格等於(===)的成員。或者,如果設置了深度標誌,則會比較集合成員的深度平等。

你的說法就變成了:

exp(table.getData()).to.eventually.deep.include.members([actualBalances]); 

使用標誌以確保柴會會比較兩個數組的深層內容。

此外,只有當數組內的順序相同時,這纔會起作用。你可能想要對它們進行排序。

I wrote a small example here這就是你想要的。它使用'should'接口而不是'expect',但這並不重要。

+0

這其實很好。我不知道。我正在刪除我的答案,以支持你的答案。謝謝! –

+0

對我而言,不幸的是我的數據是作爲黃瓜TableData對象傳遞給我的:thenCatch:[Function], thenFinal:[Function], addCallback_:[Function]}作爲數組 – Joly

+0

哦,我被你在問題中討論數組的事實所誤導。 事實上,如果你的數據是一個對象而不是數組,那麼它將不起作用,因爲** include僅適用於字符串或數組**。不幸的是,我根本不知道黃瓜,所以我不知道它是如何工作的。 也許你可以將你的TableData對象轉換爲*真實*數組? – noKid